こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLServer 複数列から同一語を検索

SQLServer2008R2を使用しています。
次のようなテーブルAがあります。

ID Code1 Code2 Code3 Val1 Val2 Val3
--------------------------------------
1  A1             1
2  A1   Z1         2   1
3  B1   A1         1   1

この時、Code1~3にあるA1に該当するVal1~3の合計をそれぞれ取得したいのですが、SQL文の書き方がわかりません。

SELECT Sum(Val1), Sum(val2), Sum(Val3) FROM A WHERE Code1='A1' OR Code2='A1' OR Code3='A1'
のようなSELECT文では、B1・Z1の数も合計してしまいます。
B1・Z1の数が含まれないようなSQL文は、どのように記述したらよいでしょうか?

どなたか有識者の方いらっしゃいましたら、宜しくお願い致します!

投稿日時 - 2013-12-19 11:15:01

QNo.8392481

困ってます

質問者が選んだベストアンサー

SELECT
SUM(CASE WHEN Code1='A1' THEN Val1 ELSE 0 END),
SUM(CASE WHEN Code2='A1' THEN Val2 ELSE 0 END),
SUM(CASE WHEN Code3='A1' THEN Val3 ELSE 0 END),
FROM A

投稿日時 - 2013-12-19 11:39:17

お礼

できました!
いただいたSQL文の内容について、調べてみたいと思います。
回答ありがとうございました。

投稿日時 - 2013-12-19 14:48:05

ANo.1

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

こんにちは。

下記のようにしてみてください。

-- #### テーブル作成
CREATE TABLE dbo.TempData
(
ID int
, Code1 varchar(10)
, Code2 varchar(10)
, Code3 varchar(10)
, Val1 int
, Val2 int
, Val3 int
)

-- #### テストデータ登録
INSERT INTO dbo.TempData
SELECT 1, 'A1', null, null, 1, null, null UNION ALL
SELECT 2, 'A1', 'Z1', null, 2, 1, null UNION ALL
SELECT 3, 'B1', 'A1', null, 1, 1, null


-- #### データ確認
SELECT
SUM(CASE WHEN Code1='A1' THEN Val1 ELSE 0 END) AS Val1,
SUM(CASE WHEN Code2='A1' THEN Val2 ELSE 0 END) AS Val2,
SUM(CASE WHEN Code3='A1' THEN Val3 ELSE 0 END) AS Val3
FROM dbo.TempData
WHERE Code1='A1' OR Code2='A1' OR Code3='A1'

投稿日時 - 2013-12-19 12:47:08

お礼

正しく結果を得ることができました!
回答ありがとうございました。

投稿日時 - 2013-12-19 14:49:56

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-