简体   繁体   English

如何在SQL 2000的where子句中使用case语句

[英]How to use case statement inside where clause of sql 2000

I have a query that contains a WHERE clause with a CASE statement in it (See code below), somehow it doesn't seem to work. 我有一个查询,其中包含带有CASE语句的WHERE子句(请参见下面的代码),以某种方式似乎不起作用。

select *  FROM
        details
        where orgcode in 
        (case when orgtype='P' then 
        (SELECT distinct [PCode]
        FROM   [GPOS_Extract].[dbo].[GP8288List])
        else
        0 end )

How about 怎么样

select *  FROM details
where (orgtype <> 'P' AND orgcode = 0)
or orgcode in 
(
    SELECT distinct [PCode]
    FROM [GPOS_Extract].[dbo].[GP8288List]
)

Or try this: 或尝试以下方法:

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] )

I think the following is the logic that is equivalent to your attempt: 我认为以下是与您的尝试等效的逻辑:

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);

case returns a single value. case返回单个值。 You are trying to use it as though it returns a result set. 您正在尝试使用它,就像它返回结果集一样。 What you want is: 您想要的是:

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)

what about this, 那这个呢,

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM