首页 > 解决方案 > SQL Server:多行的单行输出

问题描述

你能指导我满足以下要求吗?

数据:

C_ID        A_ID        A_VAL        UPDATE_DATE    
------------------------------------------------
83181064    BDAY        2004         2021-08-26 
83181064    ANNIV                    2021-08-23 
83181064    EXPR        2006         2021-08-23

预期输出:

C_ID        A_ID_B    A_VAL_B       UPDATE_DATE_B   A_ID_N      A_VAL_N    UPDATE_DATE_N  A_ID_M      A_VAL_M       UPDATE_DATE_M
83181064    BDAY      2004          2021-08-26      ANNIV                  2021-08-23     EXPR        2006          2021-08-23

标签: sql-server

解决方案


您可以使用表的多重连接,如下所示:声明表及其值

declare @t table(C_ID int, A_ID varchar(200), A_VAL varchar(200),UPDATE_DATE date);

insert into @t(C_ID, A_ID, A_VAL,UPDATE_DATE)
values
(83181064, 'BDAY', 2004,'2021-08-26'),
(83181064, 'ANNIV',null,'2021-08-23'),
(83181064,'EXPR', 2006,'2021-08-23')

表与自身的多重连接;

SELECT B.[C_ID],
B.A_ID AS A_ID_B,B.A_VAL AS A_VAL_B,B.UPDATE_DATE AS UPDATE_DATE_B,
N.A_ID AS A_ID_N,N.A_VAL AS A_VAL_N,N.UPDATE_DATE AS UPDATE_DATE_N,
M.A_ID AS A_ID_M,M.A_VAL AS A_VAL_M,M.UPDATE_DATE AS UPDATE_DATE_M
FROM @t B
INNER join @t N
on B.C_ID=N.C_ID 
INNER join @t M
on B.C_ID=M.C_ID 
WHERE B.A_ID='BDAY' AND N.A_ID='ANNIV' AND M.A_ID='EXPR'

推荐阅读