2

他のいくつかの列で名前が付けられた列を持つDBテーブルがあります

ColorA
ColorB
Status

このDBのデータは次のようになります。

ColorA     ColorB    Status
---------     ---------    ---------
GREEN           NULL       YES
GREEN           NULL       YES
RED             GREEN      NO
RED             GREEN      YES

私が望む結果は、Status='YES'に応じて次のようになります

Color  Count
GREEN   3
RED     1

すべての色を保持するテーブルも定義しました。

前述のように出力されるこのためのSQLクエリを構築するにはどうすればよいですか?クエリがありますが、LEFT結合を使用していて、適切な結果が得られないUNIONを実行しています。

4

3 に答える 3

4

これは機能するはずです:

SELECT a.color, 
       Count(a.color) AS Count 
FROM   (SELECT colora AS color 
        FROM   table1 
        WHERE  status = 'YES' 
               AND colora IS NOT NULL 
        UNION ALL 
        SELECT colorb 
        FROM   table1 
        WHERE  status = 'YES' 
               AND colorb IS NOT NULL) a 
GROUP  BY a.color 

結果

| 色| カウント|
-----------------
| グリーン| 3 |
| 赤| 1 |

デモを見る

于 2013-02-19T03:51:18.133 に答える
0

あなたが与えた例から、あなたは各ColorAまたはColorBレコードの数を知りたいです

SELECT Color, SUM(Total) AS Count
FROM (
    SELECT ColorA as Color, SUM(CASE WHEN Status = 'Yes' THEN 1 ELSE 0 END) AS Total
    Group By ColorA
UNION
    SELECT ColorB as Color, SUM(CASE WHEN Status = 'Yes' THEN 1 ELSE 0 END) AS Total
    Group By ColorB
) U
GROUP BY Color
于 2013-02-19T03:51:50.180 に答える
0

これは、SQL Server、MySQL、およびPostgreSQL(SQLFiddleデモ)で機能します。

SELECT color, sum(cnt) AS count FROM (
    SELECT colorA AS color, count(*) AS cnt
    FROM mytable
    WHERE status = 'YES'
    GROUP BY colorA
UNION ALL
    SELECT colorB AS color, count(*) AS cnt
    FROM mytable
    WHERE status = 'YES'
    GROUP BY colorB
) AS x
WHERE color IS NOT NULL  
GROUP BY color
于 2013-02-19T04:03:47.033 に答える