帮助SQL查询

时间:2011-09-15 15:25:05

标签: sql tsql

我有两张桌子。

设备

  • DEVICEID
  • 的DeviceName

DeviceAttribute

  • DeviceAttributeId
  • 属性Id
  • DEVICEID

现在,我尝试编写一个查询,在其中传入一些属性ID,我想查找所有传入所有ID的设备。

我将XML作为XML传递,然后我可以将这些数据转换为临时表,每个Id都在自己的行中。

所以,在这一点上,假设我想要匹配的所有属性都在一个表中 -

CREATE TABLE #TempAttribute(AttributeId int)

所以,我可能想找到所有具有attributeIds 3,34和67

的设备

我有一个查询将所有设备属性ID连接成一列,但我不确定这是否朝着正确的方向发展:

SELECT deviceID
 , [Name]
 , (SELECT CAST(cast(attributeID as varchar(10)) + ', ' AS VARCHAR(MAX)) 
     FROM deviceattribute 
     WHERE (deviceID = device.deviceID) 
     order by attributeID
     FOR XML PATH ('')
  ) AS attribs
    FROM device

希望有人可以提供帮助!

1 个答案:

答案 0 :(得分:3)

DECLARE @NumberOfAttributes INT;

INSERT INTO #TempAttribute
SELECT DISTINCT .... /* Rest of your XML query*/

SET @NumberOfAttributes= @@ROWCOUNT;

SELECT DeviceId,
       DeviceName
FROM   Devices
WHERE  DeviceId IN (SELECT DeviceId
                    FROM   DeviceAttribute da
                           JOIN #TempAttribute ta
                             ON da.Attributeid = ta.Attributeid
                    GROUP  BY DeviceId
                    HAVING COUNT(*) = @NumberOfAttributes) ;