当前位置: 代码迷 >> Sql Server >> SQL语句写法有关问题
  详细解决方案

SQL语句写法有关问题

热度:55   发布时间:2016-04-24 09:04:01.0
SQL语句写法问题
SQL:  SELECT a.jbrq, a.ddph, a.gysmc, a.gysdz,a.pzs, a.ddje, a.czy, a.ckmc,a.cgy,a.jhrq,case when a.shbj = '0' then '0' when (a.shbj='1' and a.wcbj='1') then '2' else '1' end as shbj,a.gysid,a.pym,a.ckid FROM CGGL_DD_ZB as a
where  @shbj = '' or  t.shbj = @shbj 

现在 有三条数据  分别: shbj = 1 wcbj= 0 ; shbj = 0 wcbj = 0 ;shbj = 1 wcbj = 1;
这里 当 传入 @shbj值  为 ‘2’ 时,,,查询不到数据   ,反而 在 传入 ‘1’ 时 会查询到 该 数据

请问 这个 SQL语句 该 怎么写啊?
------解决思路----------------------
另外,你的条件
where  @shbj = '' or  t.shbj = @shbj
2的时候这个不成立,所以没有数据
------解决思路----------------------
你的 shbj 中没有 2,没结果很正常啊。
where 条件中的 shbj 是原表的字段,和 select 中的 as shbj 别名没有关系。
要用 case 结果比较,有两种方式
SELECT *
  FROM (SELECT a.jbrq, a.ddph, a.gysmc, a.gysdz,a.pzs,
               a.ddje, a.czy, a.ckmc,a.cgy,a.jhrq,
               case when a.shbj = '0' then '0'
                    when (a.shbj='1' and a.wcbj='1') then '2'
                    else '1'
               end as shbj,
               a.gysid,a.pym,a.ckid
          FROM CGGL_DD_ZB as a
       ) t
 where t.@shbj = '' or  t.shbj = @shbj

SELECT a.jbrq, a.ddph, a.gysmc, a.gysdz,a.pzs,
       a.ddje, a.czy, a.ckmc,a.cgy,a.jhrq,
       case when a.shbj = '0' then '0'
            when (a.shbj='1' and a.wcbj='1') then '2'
            else '1'
       end as shbj,
       a.gysid,a.pym,a.ckid
  FROM CGGL_DD_ZB as a
 where @shbj = ''
    or (case when a.shbj = '0' then '0'
            when (a.shbj='1' and a.wcbj='1') then '2'
            else '1'
        end) = @shbj
  相关解决方案