【问题标题】: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)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-03-26
              • 2013-10-16
              • 2017-01-27
              • 1970-01-01
              • 1970-01-01
              • 2021-11-12
              • 1970-01-01
              相关资源
              最近更新 更多