0

問題: case ステートメントを使用してテーブルをグループ化するにはどうすればよいですか。

たとえば、2 つのテーブルがあります。

最初のテーブル

ID名
1 a
2 b
3 c

2番目のテーブルは

ID ステータス
1 赤
1 赤
1 青
1 赤

シナリオは次のとおりです。

  • テーブル 1 とテーブル 2 に結合 ID を残しました。
  • 同じ ID を持つ場合は、case ステートメントが作成されます。

    1. 表 2 のすべてのステータスに赤が含まれる場合 [条件]
    2. ステータスに赤と青が含まれる場合、[条件]
    3. ケースにない場合 [状態]

これをどのように作成しますか?

4

1 に答える 1

1

ほとんど/すべての DBMS にまたがる一般的なアプローチでは、これを使用できます。

SELECT  t.ID,
        t.Name,
        CASE WHEN t.Red = t.Total THEN 'Only Red condition'
            WHEN t.Red > 0 AND t.Blue > 0 THEN 'Red and blue condition'
            ELSE 'Other condition'
        END AS CaseCondition
FROM    (   SELECT  Table1.ID,
                    Table1.Name,
                    COUNT(CASE WHEN Table2.Status = 'Red' THEN 1 END) AS Red,
                    COUNT(CASE WHEN Table2.Status = 'Blue' THEN 1 END) AS Blue,
                    COUNT(Table2.Status) AS Total
            FROM    Table1
                    LEFT JOIN Table2
                        ON Table1.ID = Table2.ID
            GROUP BY Table1.ID, Table1.Name
        ) t

DBMS が PIVOT をサポートしている場合 (可能な値は red と blue のみ)、次のようなものを使用できます。

SELECT  ID,
        Name
        CASE WHEN pvt.Red > 0 AND pvt.Blue = 0  THEN 'Only Red condition'
            WHEN t.Red > 0 AND t.Blue > 0 THEN 'Red and blue condition'
            ELSE 'Other condition'
        END AS CaseCondition
FROM    Table1
        LEFT JOIN Table2
            ON Table1.ID = Table2.ID
        PIVOT
        (   COUNT(Table2.ID)
            FOR Table2.Status IN ([Red], [Blue])
        ) pvt
于 2013-02-05T08:41:00.457 に答える