2011-09-15 24 views
2

私は2つのテーブルを持っています。SQLクエリのヘルプ

デバイス

  • のDeviceID
  • DeviceNameの

DeviceAttribute

  • DeviceAttributeId
  • Attributeid
  • DEVICEID

が、私は、属性IDの数に渡す、と私はすべてのIDが渡されているすべてのデバイスを検索したい、クエリを記述しようとしています。

私はXMLとしてIDを渡しています。このデータを一時テーブルに変換することができます。このテーブルは、独自の行にあるそれぞれのIDです。

ので、この時点で、私は一致するすべての属性がテーブルにあると仮定 -

のでTABLE #TempAttribute(AttributeId int型)

をCREATE、私はすべてのデバイスを検索することもできますこれは持ってattributeIds 3,34および67

私はすべてのデバイスが1列に属性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 

誰かが助けてくれることを願っています。

+0

私はあなたがこれをオーバーコンプリートしていると思います... – JNK

+0

私は確かにありました!私は完全に間違った道を下っていて、明白な解決策は考えていませんでした! – mp3duck

答えて

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) ; 
+0

それは、100%、私が探していたものです! あなたは一度見てかなり明白! ありがとうございました! – mp3duck