SQL Server 2008 R2 に 2 つのテーブルがあります。
Store: Record:
-------------- ------------------------
Shape ID PickedShape Finished
Circle 1 Circle Y
Circle 2 Circle N
Circle 3 Square N
Square 1 Square N
Square 2 Oval Y
Triangle 1 Oval Y
可能なすべての形状とその数を 2 つのテーブルに出力する SQL クエリを作成したいと考えています。次のように、ばかげた方法で書くことができます
select
'Circle', (select count(1) from Store where Shape = 'Circle'),
(select count(1) from Record where PickedShape = 'Circle'),
(select count(1) from Record where Finished = 'Y' and PickedShape = 'Circle')
UNION
select
'Square', (select count(1) from Store where Shape = 'Square'),
(select count(1) from Record where PickedShape = 'Square'),
(select count(1) from Record where Finished = 'Y' and PickedShape = 'Square')
UNION...
続けますが、それはばかげて効率的ではありません。
より賢い方法は、group by を使用することだと思います。スプーンで食べさせるのが苦手な人もいるかもしれないので、私が試したのはこちら
SELECT
Shape, COUNT(Shape) AS Available, Picked, Finished
FROM
Store
FULL JOIN
(SELECT PickedShape, COUNT(1) As Picked, SUM(CASE WHEN Finished='Y' THEN 1 ELSE 0 END) AS Finished
FROM Record
GROUP BY PickedShape) t2 ON Store.Shape = t2.PickedShape
GROUP BY
Shape, Picked, Finished
そして出力は
Shape Available Picked Finished
NULL 0 2 2
Circle 3 2 1
Square 2 2 0
Triangle 1 NULL NULL
どこに問題があるかがわかります。
まず、NULL ではなく Shape の下に「Oval」を配置します。FULL JOIN を使用すると、両方のテーブルのすべてのバリエーションが表示されますが、表示されません...
2 番目に、欠落している NULL ではなく Picked と Finished を 0 と表示するようにします。
第三に、可能であれば SQL をより効率的にしたいと考えています。
それらの問題をどのように解決しますか?
ありがとうございました!