- - PR -
sqldatasouceへのselect文について
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2009-02-05 12:47
いつも拝見し参考にさせて頂いています。
今回の質問はSQLSERVER2005よりaspxのアプリへ情報を表示する際のSQL文についてです。 以下のようなテーブルがあります。 *Table_A 行 | ID | No | CODE | --------------------- 1 1 1 1001 2 1 2 2001 3 1 3 3001 4 1 4 4001 5 1 5 5001 6 2 1 1001 7 2 2 2001 8 2 5 3001 9 3 1 1001 10 3 2 2001 このテーブルよりselect文にてデータをgrid表示させていのですが、 IDが[1]以外でCODEがID=1と同じ値があった場合には、ID=1と同じNoを取得し 表示させたいと考えています。(8行目を2,5,3001 → 2,3,3001) case式で判断させようとしましたがエラーになってしまいWEBで検索等行っても 探せなかったので投稿させて頂きました。 どなたがご教授頂けませんか? 宜しくお願い申し上げます。 select ID,case when ID=2 and No = ID=1 and No Then ID=1 and No else No end as No,CODE FROM Table_A | ||||||||||||
|
投稿日時: 2009-02-05 13:24
(SQL Server2008で確認しました) 貼り付けていただいたCase文はコピペミスのためか(No = ID=1 あたり)、 おかしかったので、書き直してしまいました。すいません。
これだけですと、条件(または制約)が不足していますが、 現在のデータ(示していただいたTable_A)で表示させようと思った場合は 以下のやり方があります。 ※ 制約は後述 # もっとスマートなやり方がありそうですけど
無理やりCASE文だけでという場合は
# こういうやり方、もっと複雑なSQLだと最適化によってはこっちの方が早かった経験があります。 いずれにせよ、CASE文単体では他の行のレコードを参照できなかったと思いますので、 副問い合わせか結合を行わないといけないと思います。 制約ですが、 「IDが1でCODEが同じものが1件しかない場合」に限ります。 たとえばTable_Aに、11 1 6 3001 という情報があった場合は 複数件取れてしまうので、最初の例では行数が増え、後の例ではエラーです。 | ||||||||||||
|
投稿日時: 2009-02-05 13:28
自己参照しないと無理でしょう。
[ メッセージ編集済み 編集者: turutosiya 編集日時 2009-02-05 13:30 ] [ メッセージ編集済み 編集者: turutosiya 編集日時 2009-02-05 13:31 ] [ メッセージ編集済み 編集者: turutosiya 編集日時 2009-02-05 13:32 ] | ||||||||||||
|
投稿日時: 2009-02-06 10:16
デューンさん、turutosiyaさん
親切に教えて頂きありがとうございます! 勉強になりました。 早速ためしてみます。 ありがとうございました。 |
1