0

我需要为报告编写 SQL 查询。用户可以选择六个动态过滤器,即用户可以选择一个或两个最多六个过滤器。

在每个过滤器中,用户从下拉列表中选择设备的属性,操作员及其值用户需要输入。这构成了一个过滤器,例如:

     AttributeName  Operator    Value
     Cost           equal       480
AND  MappedName     contains    DummyString

这里“成本”是属性,“480”是值,整个事情由一个过滤器组成。在类似的时尚用户可以选择最大。6 个过滤器 两个过滤器之间的运算符也是动态的。它可以是“AND”或“OR”

在报告中,我需要为每个过滤器动态生成一个列以及一些静态列,例如设备名称、设备制造是静态列,而上述过滤器是动态的。

因此,当用户选择了两个过滤器时的报告将如下所示:

DeviceName   DeviceManufactur  Cost              MappedName    
D1           DM1               480               DummyString 
D2           DM2               480               DummyString  

在数据库中,属性存储如下:

 DeviceName   DeviceManufactur  AttributeName              AttributeValue
   D1           DM1               Cost                      480
   D1           DM1               MappedName               DummyString  
   D2           DM2               Cost                      480
   D2           DM2               MappedName               DummyString 

所以当我写简单的sql时

select d.name,d.manufacture,d.AttName,d.value
from Device d
where d.AttName='Cost' and d.AttValie='480'
    and d.AttName='MappedName' and d.AttValue='DummyString'

尽管设备与这两个属性相关联,但它永远不会给我任何记录。

任何人都可以建议任何特定的 SQL 函数,这将有助于我有效地编写这个逻辑。

4

1 回答 1

0

我认为我并没有真正理解您的问题,但我唯一能想到的是:

SELECT d.DeviceName, d.DeviceManufactur, d.AttributeName, d.AttributeValue
FROM aDevice d
WHERE d.DeviceName IN (
    SELECT dd.DeviceName
    FROM aDevice dd
    WHERE EXISTS (SELECT 1 FROM aDevice ddd WHERE AttributeName='Cost' AND AttributeValue='480' AND ddd.DeviceName = dd.DeviceName)
    AND EXISTS (SELECT 1 FROM aDevice ddd WHERE AttributeName ='MappedName' AND AttributeValue = 'DummyString' AND ddd.DeviceName = dd.DeviceName))

这应该返回与查询匹配的任何设备的所有信息Cost = '480' AND MappedName = 'DummyString'......

于 2012-07-12T16:10:05.280 回答