Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在T-SQL中按空值分组_Sql Server_Tsql_Group By_Null - Fatal编程技术网

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()函数