• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLServer 複数列から同一語を検索)

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

このQ&Aのポイント
  • SQLServer2008R2を使用しています。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文は、どのように記述したらよいでしょうか?

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

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

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

a00ki_kA1M
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • innoya
  • ベストアンサー率71% (10/14)
回答No.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'

a00ki_kA1M
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Oracl[10g]の SQL文について(No5)

    何度も恐縮です。また、違った事が出てきました。(^^; Oracl[10g]の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [NOUKI] と [KIN] と [CODE2] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 AAA A-1 2005/01/02 200 AAA A-2 2005/01/01 300 AAA A-2 2005/01/10 400 DDD A-2 2005/12/10 500 EEE と、します。 [B2]テーブルに [CODE2] と [NO] と [KIN2] フィールドがあるとします。 内容は、 AAA 1 1000 AAA 2 2000 DDD 1 3000と、します。 結果が、 A-1 NAME-1 300[B]テーブルの合計 3000[B2]テーブルの合計 A-2 NAME-2 1200[B]テーブルの合計 3000[B2]テーブルの合計 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? つまり、[CODE2]のフィールドを[B2]テーブルに反映させたいのです。 SELECT A.CODE,A.NAME,SUM(B.KIN),SUM(B2.KIN2) FROM A, B, B2 WHERE A.CODE=B.CODE AND B.CODE2=B2.CODE2 GROUP BY A.CODE,A.NAME ORDER BY A.CODE と、すれば、何故か A-1 NAME-1 600 6000 A-2 NAME-2 1000 6000 と、言う結果がでます。 これは、1つのSQL文では無理なのでしょうか ? よろしくお願い致します。

  • SQLServer2000 SQL文について

    SQLServer2000 SQL文について Where句内で、このような演算指定はできますか? できない場合このようなSQLを実行したい場合 他にどのような方法が考えられますでしょうか? select a.id from a,b where a.yymm = b.yymm-1

  • 副問い合わせで複数の列を返す

    こんにちは、Makotoと申します。 SQLの副問い合わせで質問があるのですが、 現在のSQLは CREATE OR REPLACE VIEW VIWTEST AS SELECT KOMOKU1, KOMOKU2 (SELECT SUM(KOMOKU3) FROM TBL WHERE A = 1 (SELECT SUM(KOMOKU4) FROM TBL WHERE A = 1 (SELECT SUM(KOMOKU5) FROM TBL WHERE A = 1 FROM M_TBL; という感じのSQLなのですが、副問い合わせの所 が見ているテーブルも条件も一緒なので1つにまとめたいのですが、うまくいきません。CURSORという関数があったのですが、VIEWでは使用できませんでした。なにかよい方法はないでしょうか? 開発環境は oracle 9i(AIX) pro*C/C++ でおこなっています。

  • SQLServer2000:テーブルの先頭に列を追加したい

    いつもお世話になっております SQLServer2000を使用しております。 あるテーブルに a,b,c,dという4つの項目が存在している状態で aの前にzというフィールドを追加したいと考えております。 Enterprise Managerを使えば簡単に行うことが出来ますが、 これをクエリアナライザで行いたい場合に どのようにSQL文を記述すればよいのか、見つけることが出来ませんでした。 このようなことは可能なのでしょうか。 ご存知の方がいらっしゃいましたら、ご教示のほど、何卒よろしくお願いいたします。

  • Oracl[10g]の SQL文について(No.7)

    何度も本当に恐縮です。自力で頑張ろうと思いましたが無理でした。(;_;) Oracl[10g]の SQL文について、教えて下さい。 [A]テーブルに [CODE](key) と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [A2]テーブルに [NO](key) と [CODE1] と [KIN1] と [CODE2] と [KIN2] フィールドがあるとします。内容は、 1 A-1 100 (null null) 2 A-1 10 A-3 300 3 A-2 20 A-1 10 4 A-3 5000 A-1 20 と、します。 5 A-3 500 結果が、 A-1 NAME-1 110[A2]テーブル[KIN1]の合計 30[A2]テーブル[KIN2]の合計 A-2 NAME-2 20[A2]テーブル[KIN1]の合計 0(null) A-3 NAME-3 5500[A2]テーブル[KIN1]の合計 300 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? SELECT A.CODE, A.NAME, SUM(A2.KIN1) AS KIN1, SUM(A2.KIN2) AS KIN2 FROM A,A2 WHERE A2.CODE1=A.CODE OR A2.CODE2=A.CODE GROUP BY A.CODE, A.NAME と、すると何故か A-1 NAME-1 5130 330 A-2 NAME-2 20 10 A-3 NAME-3 5510 320 と、言う結果になってしまいます。 よろしくお願い致します。

  • SQLServer2000でデータ数が10万くらいあるテーブルから、

    SQLServer2000でデータ数が10万くらいあるテーブルから、 OrderByやTopなどのSQL文を使用すると、 SELECTに数秒かかってしまいます。 該当のカラムを主キーにはできないですが、 インデックス化?みたいなことをして、 SELECTを短時間化できないでしょうか?

  • OraclのSQL文について(No3)

    何度も恐縮です。また、違った事が出てきました。(^^; Oracl の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [NOUKI] と [KIN] と [CODE2] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 AAA A-1 2005/01/02 200 BBB A-2 2005/01/01 300 CCC A-2 2005/01/10 400 DDD A-2 2005/12/10 500 EEE と、します。 結果が、 A-1 NAME-1 300 AAA A-2 NAME-2 1200 CCC と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? つまり、[CODE2]のフィードは一番最初を表示させたいのです。 SELECT A.CODE, A.NAME, B.CODE2, SUM(B.KIN) FROM A, B WHERE A.CODE = B.CODE GROUP BY A.CODE, A.NAME,B.CODE2 ORDER BY A.CODE と、すれば A-1 NAME-1 AAA 100 A-1 NAME-1 BBB 200 A-2 NAME-2 CCC 300 A-2 NAME-2 DDD 400 A-2 NAME-2 EEE 500 と、言う結果がでます。(当然ですが) これは、1つのSQL文では無理なのでしょうか ? よろしくお願い致します。

  • SQLServerのクエリ速度の違いについて

    Webアプリケーション(ASP.NET)より、SQLServer2005に対してデータを取得しています。 その際にSELECT句のSQL文を実行しているのですが、以下のパターンによって処理速度が異なります。 ■ パターン(1) SQLCommandクラスに対して、SQL文、パラメータを渡し実行. 処理時間 = 1分程度. [SQL文] SELECT * FROM T_TEST WHERE code = @code; [ソース] Dim sqlCom As New SqlCommand(strSql, con) sqlCom.Parameters.add(New SqlParameter("@code", SqlDbType.Int)).Value = 100 …略 ■ パターン(2) 以下のSQL文をSQLCommandクラスに渡して実行. 処理時間 = 15秒程度. [SQL文] DECALRE @code As Int; SET @code = 100; SELECT * FROM T_TEST WHERE code = @code; [ソース] Dim sqlCom As New SqlCommand(strSql, con) …略 システム自体はパターン(1)の形で共通のメソッドを作成しています。 処理が遅かったのでSQLをSSMSにて解析しようとして、パターン(2)の様に変数定義をDECLAREで記述した所、速くなり、 実際のシステム上で試した所、同じような速度となりました。 パターン(1)の様な形ではパターン(2)の様な速度はやはり出ないのでしょうか? ちなみにProfilerでパターン(1)のSQL文を見たら、"EXEC sp_executesql N'SELECT ~"が実行されていました。 以上、どなたか分かる方ご教授ください。

  • オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?

    サブクエリーで複数キーを指定したいです。例えば以下のようなSQLですが、 SQL> > select * from テーブルA > where (key1,key2) in (select key1,key2 from テーブルB) このSQLはオラクルでは実行できますが、SQLSERVERでは文法エラーになってしまいます。SQL SERVER ではサブクエリーで複数キーを指定するのは不可能なのでしょうか?

  • 列を行に変換したいです。

    列を行に変換したいです。 SQLServer2008初心者です。 テーブル関数のFETCH内で以下のような図の列1~21を行に変換したいのですが、 うまくいきません。 CODE1 CODE2 CODE3 … CODE21 ----------+----------+----------+----------+---------- AAA BBB CCC … UUU ↓ 列1 ------ AAA BBB CCC … UUU 自分で調べたところ、SQLServer2005ではUNPIVOTを使えるということで 同じように書いたのですが、「'UNPIVOT'の近くに無効な構文があります」というエラーが出てきてしまいます。 ちなみに、以下のように書きました。 SELECT CODE FROM( SELECT CODE1, CODE2, …, CODE21 FROM 商品マスタ    WHERE SYCODE = @SYCODE ) AS TBL UNPIVOT (CODE for ColName in (CODE1, CODE2, …, CODE21)) AS CD UNPIVOTの使い方が間違っているようでしたらご指摘をお願いします。 また、UNPIVOTが使えない場合、 SELECT CODE1 FROM 商品マスタ WHERE SYCODE = 11111 UNION ALL SELECT CODE2 FROM 商品マスタ WHERE SYCODE = 11111 UNION ALL … という風に列21までのSELECT文をずらずらと統合することになるのかなぁ、と考えているのですが、 もっと簡潔な方法がありましたらご指導頂きたいです。 よろしくお願いします。