web-dev-qa-db-ja.com

異なる値で合計およびグループ化しようとするSQL

テーブルがあります

+-------+----------+------------+----------+---------+
| Plant | LineName | WorkCenter | Material | ProdQty |
+-------+----------+------------+----------+---------+
| x     | xl       | xl1        | y1       |       1 |
| x     | xl       | xl2        | y1       |       1 |
| x     | xl       | xl3        | y1       |       1 |
| x     | xl       | xl1        | y2       |       1 |
| x     | xl       | xl2        | y2       |       1 |
| x     | xl       | xl3        | y2       |       1 |
+-------+----------+------------+----------+---------+

私はさまざまなマテリアルの数を数え、LineNameに沿って数量を合計しようとしています。これにより、次のような結果が得られます。

+----------+------+---------+
| LineName | Cmat | ProdQty |
+----------+------+---------+
| xl       |    2 |       2 |
+----------+------+---------+

代わりに、個別のカウント、合計、グループ化の組み合わせを使用すると、間違った結果が得られます。

+----------+------+---------+
| LineName | Cmat | ProdQty |
+----------+------+---------+
| xl       |    2 |       6 |
+----------+------+---------+

これをどのように正しく行う必要がありますか?私は試しました

SELECT LineName, COUNT(DISTINCT(Material) as Cmat, SUM(ProdQty) as ProdQty
FROM table
GROUP BY LineName

しかし、それは望ましい結果を生み出しません。私はいくつかの同様のトピックについてスタック交換を探していましたが、それらは私の質問と一致しないようです。

1
LRO

コメントで確認すると、これが必要なようです

WITH Dist
     AS (SELECT DISTINCT LineName,
                         Material,
                         ProdQty
         FROM   [table])
SELECT LineName,
       COUNT(Material) AS Cmat,
       SUM(ProdQty)    AS ProdQty
FROM   Dist
GROUP  BY LineName 
2
Martin Smith