0

我有一個包含WHERE子句並含有CASE語句的查詢(請參閱下面的代碼),它似乎不起作用。如何在sql 2000的where子句中使用case語句

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

回答

2

如何

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

或者試試這個:

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

我認爲下面是相當於你嘗試的邏輯:

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

的情況下返回一個單一的價值。您正在嘗試使用它,就好像它返回一個結果集。你想要的是:

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

你看這個,

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