2009-08-13 7 views
0

内のサブクエリを削除する方法[欠落属性の数]次の例からサブクエリを削除しますか?EVAデザインで欠落しているアトリビュートの量を調べる(このSQLジョインからサブクエリを削除する)

--Setup data 
    Declare @Attributes table (AttributeID int) 
    Declare @Objects table (ObjectID int) 
    Declare @ObjectAttributes table (ObjectID int, AttributeID int, val int) 

    Insert Into @Objects (ObjectID) values (1) 
    Insert Into @Objects (ObjectID) values (2) 

    Insert Into @Attributes (AttributeID) values (1) 
    Insert Into @Attributes (AttributeID) values (2) 

    Insert Into @ObjectAttributes (ObjectID,AttributeID) values (1,1) 
    Insert Into @ObjectAttributes (ObjectID,AttributeID) values (2,1) 
    Insert Into @ObjectAttributes (ObjectID,AttributeID) values (2,2) 

    --Query 
    Select 
     ObjectID, 
     (Select Count(Distinct a2.AttributeID) FROM @Attributes a2) As [Total Count Of Attributes], 
     Count(Distinct a.AttributeID) as [Count of attributes for this object], 
     (Select Count(Distinct a2.AttributeID) FROM @Attributes a2) - Count(Distinct a.AttributeID) as [Count of Missing Attributes] 
    FROM @Attributes a 
    INNER Join @ObjectAttributes oa 
     On oa.AttributeID = a.AttributeID 
    Group By ObjectID 
    Order By ObjectID 
+0

Arg-タグには「sqlserver」を使用しないでください。あなたはこれを尋ねた時点で、**ゼロ**他の 'sqlserver'の質問と7000個以上のsql-serverの質問がありました。そして、今は 'sqlserver'タグを作成したので、それ以外の場合は使用できない250人未満のユーザーが2つの場所でそれをクリーンアップしなければなりませんでした。 –

+0

申し訳ありませんジョエル、私はちょうどクリックしすぎました – digiguru

答えて

1

これは、データが重複していないことを前提としています。属性のないオブジェクトを含めるにはHAVING句を削除します(これらは元のクエリでは残ります)。

SELECT 
    ob.Objectid 
    ,count(at.Attributeid) [Total Count Of Attributes]  
    ,count(oa.Attributeid) [Count of attributes for this object] 
    ,sum(case when oa.AttributeId is null then 1 else 0 end) [Count of Missing Attributes] 
from @Attributes at 
    cross join @Objects ob 
    left outer join @ObjectAttributes oa 
    on oa.ObjectId = ob.ObjectId 
    and oa.AttributeId = at.AttributeId 
group by ob.Objectid 
having count(distinct oa.Attributeid) > 0 
関連する問題