Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 如何为给定场景合并表中的行?_Sql Server - Fatal编程技术网

Sql server 如何为给定场景合并表中的行?

Sql server 如何为给定场景合并表中的行?,sql-server,Sql Server,假设我有一张桌子 CustId Name Age Gender Business Code 1 John 24 Male Automobiles 1 2 Peter 30 Male Space 3 2 Peter 30 Male IT null 3 Kris 48 Female Infra null 我需要输出如下 CustId Name

假设我有一张桌子

CustId Name   Age  Gender   Business    Code
1      John   24   Male     Automobiles 1
2      Peter  30   Male     Space       3
2      Peter  30   Male     IT          null
3      Kris   48   Female   Infra       null
我需要输出如下

CustId Name   Age  Gender   Business           Code
1      John   24   Male     Automobiles        1
2      Peter  30   Male     Space              3
3      Kris   48   Female   CodeNotAvailable   null   
彼得有两个公司,一个有代码,另一个没有代码。因此,将删除不带代码的行

Kris的业务没有代码,因此需要在业务列中显示CodeNotAvailable。

我们可以使用ROW_NUMBER获取行号并选择行。默认情况下,SQL Server首先命令NULL。我们需要使用order by code desc将非空值作为行中的第一行

选择客户ID、姓名、年龄、性别、业务、代码 从…起 选择*行,按客户订单按代码描述超额分配为rnk 从表中选择t 其中rnk=1
;with r as (
    select Custid, Name, Age, Gender, 
        case when code is null then 'CodeNotAvailable' else Business end as Business,
        Code
    from myTab
)
select max(CustId) CustId, Name, Age, Gender, Business, Code
from r
group by Name, Age, Gender, Business, Code