2

親/子/孫タイプのテーブル関係が次のように定義されています。

tableA:parentIDの説明

tableB:childIDparentIdの説明

tableC:孫IDchildId説明itemComplete

特定のparentIDのtableB内のすべてのレコードを、孫レコードの総数と完了した孫レコードの総数(itemComplete = true)とともに一覧表示するクエリを作成する必要があります。

parentIDはwhere句の一部になります(parentId = xであるtableBから*を選択します)。カウントはchildIdの現在の行の値に依存するため、私が理解できない問題は、tableCからカウントを取得する方法です。

言い換えれば、次のようなクエリが必要です。

select description,  
(select count (*) from tableC where childId = X) as Items,
(select count (*) from tableC where childId = X And itemComplete = true) as CompleteItems
from tableB where parentId=Y

ここで、XはtableBからの現在の行のchildIdです。サブクエリの各行からchildIdを参照して、アイテムの数と完了したアイテムの数を取得するにはどうすればよいですか?

4

1 に答える 1

8

副選択を使用することも 1 つのオプションですが、私はJOIN両方のテーブルを使用し、ステートメントを使用して合計を取得するGROUP BY句を使用することを好みます。CASE

SELECT b.description
       , COUNT(*) AS Items
       , SUM(CASE WHEN c.itemComplete = true THEN 1 ELSE 0 END) AS CompleteItems
FROM   tableB b
       LEFT OUTER JOIN tableC c ON c.childid = b.childid
WHERE  b.parentID = 'Y'
GROUP BY
       b.description

元のステートメントを使用することを主張する場合、欠けていたのは外部テーブルへの参照だけでしたtableB.childID

select description,  
(select count (*) from tableC where childId = tableB.childID) as Items,
(select count (*) from tableC where childId = tableB.childID And itemComplete = true) as CompleteItems
from tableB where parentId=Y

または再フォーマット

SELECT description
       ,  (SELECT COUNT(*) FROM tableC WHERE childId = tableB.childID) AS Items,
       ,  (SELECT COUNT(*) FROM tableC WHERE childId = tableB.childID AND itemComplete = true) AS CompleteItems
FROM   tableB 
WHERE  parentId=Y
于 2012-05-11T12:41:29.530 に答える