電子書籍の厳選無料作品が豊富!

SQL初心者です。な~んだこんな事くらいと言わず教えてください。

テーブルに
A B C
------------
5 a b
7 c d
4 a d
5 f b
------------
というデータがあります。
これを
Bの列については、aとa以外
Cの列については、bとb以外
というようにグルーピングして、合計値を出したいと思っています。

結果として
a b 5
a b以外 4
a以外 b 5
a以外 b以外 7
という形の出力イメージです。

調べてみてcase when文を使えばいいなんてことをなんとなく理解しているのですが、group byと組み合わせてどのようにSQL文を書けばいいかわかりません。
SQL Serverを使っています。ご存知の方、ご教授ください。

A 回答 (3件)

<Table1>


ID__A___B___C
1___5___a____b
2___7___c____d
3___4___a____d
4___5___f_____b

select patindex('%[a]%', B)+patindex('%[b]%', C)*2 As GroupNumber, * from table1;

|GROUPNUMBER|ID|A|B|C|
---|---------------------
1| 3| 1|5|a|b|
2| 0| 2|7|c|d|
3| 1| 3|4|a|d|
4| 2| 4|5|f|b|

このように Case文の多くは、数値に換算できることが多いです。
そして、見出しも、GROUPNUMBERで生成できます。

インラインビューが使えるならば、GROUPNUMBER を生成する記述も一回で済みます。
    • good
    • 0
この回答へのお礼

ありがとうございました。
参考になります。m(_._)m

お礼日時:2007/08/20 09:17

#とはいえとりあえずひんとだけでも。

V7.0以降なら使えるはず。
常套手段として、
case 文で条件に合致するときに1,それ以外で0を返すようにして、
それを合計するというパターンがあります。返ってくるレコードは1件になるはずです。
    • good
    • 0
この回答へのお礼

テーブルをtableとして、
SELECT sum(A),
  CASE B WHEN 'a' THEN 'Agr' ELSE 'ExceptA' END
  CASE C WHEN 'b' THEN 'Bgr' ELSE 'ExceptB' END
FROM table1 GROUP BY B,C;
という感じでしょうか(まだ未実行)。
ありがとうございます。なんとなくやれそうな気がします。

お礼日時:2007/08/20 09:15

自分なりに考えたSQLは、提示できないのですか?



ここの利用規約では、「分からないところを具体的に示し、質問する」ことになっています。「仕様を提示してSQLを作ってもらう」という行為は、「質問でなく、作業依頼」と判断されると削除されてしまう可能性があります。

>SQL Serverを使っています

バージョンを書きましょう。
誰かから、せっかく具体的なSQLの提示を受けても、質問者さんの環境では実行できないかも知れません。
例えば、インラインビュー(「select ~ from (select ~ from ~)」という書き方)、分析関数などは、SQL Server 2005で実装されています。
    • good
    • 0
この回答へのお礼

まず、バージョンはSQL Server2005です。
調べ方もわからず、このような質問になってしまい申し訳ありません。
ご迷惑をおかけするのも何ですから一旦取り下げます。

皆さんはSQL文がわからない場合、どのように調べて(考え)やっているのでしょうか…??

お礼日時:2007/08/20 09:07

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

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