declare @DSRXX table(JL varchar(10),CLLB varchar(20),SWQK varchar(20),RDSID varchar(20))
insert into @DSRXX select '3','机动车|轿车','受伤','111'
insert into @DSRXX select '20','机动车|货车','受伤','111'
insert into @DSRXX select '5','机动车|卡车','死亡','222'
insert into @DSRXX select '3','机动车|两轮摩托车','死亡','222'
insert into @DSRXX select '0','非动车|自行车','死亡','333'
insert into @DSRXX select '21','机动车|轿车','受伤','333'declare @SGDA table(apply varchar(10),rdsid varchar(20))
insert into @SGDA select '1','111'
insert into @SGDA select '1','222'
insert into @SGDA select '1','222'SELECT jl=(case when jl>20 then 20 else jl end), 
          机动车人数= count(CASE WHEN D .CLLB LIKE '机动车%' THEN '机动车' END) , 
         死亡=      count(CASE WHEN D .SWQK LIKE '死亡%' THEN '死亡' END) , 
          受伤=    count(CASE WHEN D .SWQK LIKE '受伤%' THEN '受伤' END)
         FROM @DSRXX D INNER JOIN
               @SGDA S ON D .RDSID = S.RDSID
         WHERE (S.APPLY = '1')
         GROUP BY jl
select * from @dsrxx D INNER JOIN @SGDA S ON D.RDSID=S.RDSID
select * from @dsrxx D执行结果
jl          机动车人数       死亡          受伤          
----------- ----------- ----------- ----------- 
20          1           0           1
3           3           2           1
5           2           2           0(所影响的行数为 3 行)警告: 聚合或其它 SET 操作消除了空值。
JL         CLLB                 SWQK                 RDSID                apply      rdsid                
---------- -------------------- -------------------- -------------------- ---------- -------------------- 
3          机动车|轿车               受伤                   111                  1          111
20         机动车|货车               受伤                   111                  1          111
5          机动车|卡车               死亡                   222                  1          222
5          机动车|卡车               死亡                   222                  1          222
3          机动车|两轮摩托车            死亡                   222                  1          222
3          机动车|两轮摩托车            死亡                   222                  1          222(所影响的行数为 6 行)JL         CLLB                 SWQK                 RDSID                
---------- -------------------- -------------------- -------------------- 
3          机动车|轿车               受伤                   111
20         机动车|货车               受伤                   111
5          机动车|卡车               死亡                   222
3          机动车|两轮摩托车            死亡                   222
0          非动车|自行车              死亡                   333
21         机动车|轿车               受伤                   333
为什么会有这样的错误呢?
我要的是根据JL来GROUP 如果JL大于20的都算20来统计CLLB,SWQK(死亡,受伤),那要怎么写这个sql呢?谢谢

解决方案 »

  1.   

    declare @SGDA table(apply varchar(10),rdsid varchar(20))
    insert into @SGDA select '1','111'
    insert into @SGDA select '1','222'
    insert into @SGDA select '1','222'这个表是以哪个字段作为主键?  因为有两行一样,join时@DSRXX也各变成两行.
      

  2.   

    declare @SGDA table(apply varchar(10),rdsid varchar(20))
    insert into @SGDA select '1','111'
    insert into @SGDA select '1','222'
    insert into @SGDA select '1','333'
    对不起,手误
      

  3.   

    机动车人数= count(CASE WHEN D .CLLB LIKE '机动车%' THEN '机动车' END) , 
             死亡=         count(CASE WHEN D .SWQK LIKE '死亡%' THEN '死亡' END) , 
              受伤=    count(CASE WHEN D .SWQK LIKE '受伤%' THEN '受伤' END)
    取值时有null才会报
    警告: 聚合或其它 SET 操作消除了空值。
    错误
      

  4.   

    declare @DSRXX table(JL varchar(10),CLLB varchar(20),SWQK varchar(20),RDSID varchar(20))
    insert into @DSRXX select '3','机动车|轿车','受伤','111'
    insert into @DSRXX select '20','机动车|货车','受伤','111'
    insert into @DSRXX select '5','机动车|卡车','死亡','222'
    insert into @DSRXX select '3','机动车|两轮摩托车','死亡','222'
    insert into @DSRXX select '0','非动车|自行车','死亡','333'
    insert into @DSRXX select '21','机动车|轿车','受伤','333'declare @SGDA table(apply varchar(10),rdsid varchar(20))
    insert into @SGDA select '1','111'
    insert into @SGDA select '1','222'
    insert into @SGDA select '1','333'SELECT jl = (case when jl>20 then 20 else jl end), 
           动车人数 = count(CASE WHEN D .CLLB LIKE '机动车%' THEN '机动车' END) , 
           死亡 = count(CASE WHEN D .SWQK LIKE '死亡%' THEN '死亡' END) , 
           受伤 = count(CASE WHEN D .SWQK LIKE '受伤%' THEN '受伤' END)
    FROM @DSRXX D INNER JOIN @SGDA S ON D .RDSID = S.RDSID
    WHERE (S.APPLY = '1')
    GROUP BY (case when jl>20 then 20 else jl end)/*
    jl          动车人数        死亡          受伤          
    ----------- ----------- ----------- ----------- 
    0           0           1           0
    3           2           1           1
    5           1           1           0
    20          2           0           2(所影响的行数为 4 行)
    */