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呢?谢谢
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呢?谢谢
insert into @SGDA select '1','111'
insert into @SGDA select '1','222'
insert into @SGDA select '1','222'这个表是以哪个字段作为主键? 因为有两行一样,join时@DSRXX也各变成两行.
insert into @SGDA select '1','111'
insert into @SGDA select '1','222'
insert into @SGDA select '1','333'
对不起,手误
死亡= count(CASE WHEN D .SWQK LIKE '死亡%' THEN '死亡' END) ,
受伤= count(CASE WHEN D .SWQK LIKE '受伤%' THEN '受伤' END)
取值时有null才会报
警告: 聚合或其它 SET 操作消除了空值。
错误
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 行)
*/