【问题标题】:How to use case statement inside where clause of sql 2000如何在sql 2000的where子句中使用case语句
【发布时间】:2013-12-17 14:23:52
【问题描述】:
我有一个包含 WHERE 子句和 CASE 语句的查询(请参见下面的代码),不知何故它似乎不起作用。
select * FROM
details
where orgcode in
(case when orgtype='P' then
(SELECT distinct [PCode]
FROM [GPOS_Extract].[dbo].[GP8288List])
else
0 end )
【问题讨论】:
标签:
sql
sql-server
sql-server-2008
sql-server-2005
sql-server-2008-r2
【解决方案1】:
怎么样
select * FROM details
where (orgtype <> 'P' AND orgcode = 0)
or orgcode in
(
SELECT distinct [PCode]
FROM [GPOS_Extract].[dbo].[GP8288List]
)
【解决方案2】:
或者试试这个:
SELECT * FROM details
WHERE details.orgcode IN
( SELECT DISTINCT
(CASE WHEN details.orgtype='P'
THEN [GPOS_Extract].[dbo].[GP8288List].PCode
ELSE 0 END)
FROM [GPOS_Extract].[dbo].[GP8288List] )
【解决方案3】:
我认为下面的逻辑相当于你的尝试:
select *
FROM details
where (orgtype = 'P' and
orgcode in (SELECT distinct [PCode]
FROM [GPOS_Extract].[dbo].[GP8288List]
)
) or
((orgtype <> 'P' or orgtype is NULL) and orgcode = 0);
【解决方案4】:
这个怎么样,
select a.*,case when orgtype='P' then PCode else '0' end FROM
details a
left join [GPOS_Extract].[dbo].[GP8288List] b on a.orgcode=b.PCode
【解决方案5】:
case 返回单个值。您正在尝试使用它,就好像它返回一个结果集一样。你想要的是:
select * FROM details d
where (orgtype = 'p'
And exists (Select *
From GPOS_Extract.dbo.GP8288List
Where PCode = d.orgcode))
or (orgtype <> 'p' And orgcode= 0)