重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

以下の様なデータがあります。
      氏名  科目 得点
1行目  Aさん  国語 100
2行目  Bさん  国語 90
3行目  Aさん  英語 80

これを以下の様な表にしようと思い、
氏名 国語 英語
Aさん 100 80
Bさん 90 -

以下のSQL分を書きましたが、Aさんの得点が2倍になってしまいます。

SELECT SL.氏名
,SUM(KT.得点) AS '国語'
,SUM(ET.得点) AS '英語'
FROM [test_db].[dbo].[得点データ] SL
LEFT OUTER JOIN (
SELECT * FROM [test_db].[dbo].[得点データ]
WHERE 科目='国語'
) KT ON ( KT.氏名 = SL.氏名 )
LEFT OUTER JOIN (
SELECT * FROM [test_db].[dbo].[得点データ]
WHERE 科目='英語'
) ET ON ( ET.氏名 = SL.氏名 )
GROUP BY SL.氏名

原因として、グループ化が結合の後にしているのだと考えています。

どの様に修正したら、いいでしょうか?

「グループ後に結合させたいのですが・・」の質問画像

A 回答 (1件)

select


氏名
,sum(case when 科目 = '国語' then 得点 else null end) as 国語
,sum(case when 科目 = '英語' then 得点 else null end) as 英語
from 得点データ
group by 氏名;
でいいのでは?

2005以降ならpivotを使ってもいいのかもしれません。
自分では全く使ったことが無いというかSQLServerの環境自体が無いので書き方は分かりませんが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
こんなやり方があったのですね。
勉強になりました。

やってみたら、出来ました。

お礼日時:2011/07/29 10:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す