Sql server 如何在T-SQL中按空值分组
在Sql server 如何在T-SQL中按空值分组,sql-server,tsql,group-by,null,Sql Server,Tsql,Group By,Null,在SELECT语句中,我需要知道Coverage列中是否有NULL;如果是这样,那么我希望它替换为不为NULL的值和GROUP BY declare @TestTable table ( ClaimNumber varchar(50), Status varchar(50), Coverage varchar(50), Losses money ) insert into @TestTable values ('WICCACA0000002', '
SELECT
语句中,我需要知道Coverage
列中是否有NULL
;如果是这样,那么我希望它替换为不为NULL的值和GROUP BY
declare @TestTable table
(
ClaimNumber varchar(50),
Status varchar(50),
Coverage varchar(50),
Losses money
)
insert into @TestTable
values ('WICCACA0000002', 'Open', 'Auto BIPD',5000),
('WICCACA0000003', 'Closed', 'Collision', 1000),
('WICCACA0000003', 'Closed', NULL, 2000)
select
ClaimNumber,
Status,
Coverage,
SUM(Losses) as Losses
from
@TestTable
group by
ClaimNumber, Status, Coverage
结果如下所示:
ClaimNumber Status Coverage Losses
--------------------------------------------
WICCACA0000002 Open Auto BIPD 5000.00
WICCACA0000003 Closed NULL 2000.00
WICCACA0000003 Closed Collision 1000.00
但我需要这样的结果:
ClaimNumber Status Coverage Losses
--------------------------------------------
WICCACA0000002 Open Auto BIPD 5000.00
WICCACA0000003 Closed Collision 3000.00
我认为coalesce()
可以满足您的需求:
select ClaimNumber, Status, coalesce(Coverage, 'Collision') as coverage
SUM(Losses) as Losses
from @TestTable
group by ClaimNumber, Status, coalesce(Coverage, 'Collision');
或者,如果Coverage
中只有一个值(如在示例数据中),只需使用聚合函数:
select ClaimNumber, Status, max(Coverage) as coverage
SUM(Losses) as Losses
from @TestTable
group by ClaimNumber, Status;
但如果有多行具有不同的非空值,则选择哪一行?谢谢,完全忘记了MAX()函数