- PR -

sqldatasouceへのselect文について

1
投稿者投稿内容
ひとひら
常連さん
会議室デビュー日: 2006/05/09
投稿数: 33
投稿日時: 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

 
デューン
大ベテラン
会議室デビュー日: 2004/04/21
投稿数: 174
お住まい・勤務地: Tokyo
投稿日時: 2009-02-05 13:24

(SQL Server2008で確認しました)

貼り付けていただいたCase文はコピペミスのためか(No = ID=1 あたり)、
おかしかったので、書き直してしまいました。すいません。





引用:

IDが[1]以外でCODEがID=1と同じ値があった場合には、ID=1と同じNoを取得し表示させたいと考えています


これだけですと、条件(または制約)が不足していますが、
現在のデータ(示していただいたTable_A)で表示させようと思った場合は
以下のやり方があります。

※ 制約は後述

# もっとスマートなやり方がありそうですけど

コード:
select 
	A.ID,
	case when B.No IS null
		then A.No
		else B.No
	end No
	,A.code 
	from table_A A
		left outer join
		(select code,no from Table_A where ID = 1) B
		on A.Code = B.Code




無理やりCASE文だけでという場合は
コード:
select
	id,
	case when code in (select code from table_A where ID = 1)
	  then (select no from table_A B where ID = 1 and code = A.code)
	  else no
	end no,
	code
	from Table_A A



# こういうやり方、もっと複雑なSQLだと最適化によってはこっちの方が早かった経験があります。


いずれにせよ、CASE文単体では他の行のレコードを参照できなかったと思いますので、
副問い合わせか結合を行わないといけないと思います。


制約ですが、
「IDが1でCODEが同じものが1件しかない場合」に限ります。
たとえばTable_Aに、11 1 6 3001 という情報があった場合は
複数件取れてしまうので、最初の例では行数が増え、後の例ではエラーです。



turutosiya
常連さん
会議室デビュー日: 2003/06/10
投稿数: 49
お住まい・勤務地: 東京都
投稿日時: 2009-02-05 13:28
自己参照しないと無理でしょう。

コード:


select
ID,
ISNULL(Table_A_Code.No, Table_A.No) AS No,
CODE
from
Table_A
left join
Table_A AS Table_A_Code
on
Table_A.CODE = Table_A_Code.code
and
Table_A_Code.ID = 1




[ メッセージ編集済み 編集者: turutosiya 編集日時 2009-02-05 13:30 ]

[ メッセージ編集済み 編集者: turutosiya 編集日時 2009-02-05 13:31 ]

[ メッセージ編集済み 編集者: turutosiya 編集日時 2009-02-05 13:32 ]
ひとひら
常連さん
会議室デビュー日: 2006/05/09
投稿数: 33
投稿日時: 2009-02-06 10:16
デューンさん、turutosiyaさん
親切に教えて頂きありがとうございます!
勉強になりました。

早速ためしてみます。

ありがとうございました。

1

スキルアップ/キャリアアップ(JOB@IT)