3

名前とグレードの2つの列を持つテーブルがあります。これは次のようになります。

名前| 学年
アダム| 1
アダム| 2
アダム| 2
アダム| 3
フランク| 2
フランク| 1

次に、次のようなビューを作成します。

名前| グレード1| グレード2| グレード3
アダム| 1 | 2 | 1
フランク| 1 | 1 | 0

私はこれを書いた:

名前を選択、
    (SELECT COUNT(グレード)
    dbo.Rodzajから
    WHERE Grade = '1')as Grade_1、  
    (SELECT COUNT(グレード)
    dbo.Rodzajから
    WHERE Grade = '2)as Grade_2、  
    (SELECT COUNT(グレード)
    dbo.Rodzajから
    WHERE Grade = '3')as Grade_3
dbo.Rodzajから
GROUPBY名

しかし、それは機能しません...私は助けをいただければ幸いです

4

1 に答える 1

3

探しているものは「ピボット テーブル」と呼ばれ、CASE各条件に 1 または 0 を適用し、次に 1 と 0 を適用しSUM()てカウントを取得する一連のステートメントで実行されます。

SELECT
  NAME,
  SUM(CASE WHEN GRADE = 1 THEN 1 ELSE 0 END) AS GRADE1,
  SUM(CASE WHEN GRADE = 2 THEN 1 ELSE 0 END) AS GRADE2,
  SUM(CASE WHEN GRADE = 3 THEN 1 ELSE 0 END) AS GRADE3
FROM Rodzaj
GROUP BY NAME

これに動的な数の列が必要な場合は、スクリプト言語とループを使用してクエリを作成する必要があることに注意してください。(またはストアド プロシージャ内のループ)

于 2012-06-25T12:24:47.293 に答える