【发布时间】:2019-01-24 13:16:50
【问题描述】:
给定表格
CREATE TABLE dbo.T
(
CN char(2) NOT NULL,
GN int NOT NULL,
SG int NOT NULL,
SN int NOT NULL,
C varchar(3),
CB varchar(max)
);
INSERT INTO dbo.T(CN,GN,SG,SN,C,CB)
VALUES
('P1',9,6,0,'020','AAA'),
('P1',9,6,1,NULL,'BBB'),
('P1',9,6,2,'020','CCC'),
('P1',9,6,3,NULL,'DDD'),
('P1',9,6,4,'020','EEE'),
('P1',9,6,5,NULL,'FFF'),
('P1',9,6,6,'020','GGG'),
('P1',9,6,7,NULL,'HHH'),
('P1',9,6,8,'020','JJJ'),
('P1',9,6,9,NULL,'LLL'),
('P1',9,6,10,NULL,'MMM'),
('P1',9,6,11,NULL,'NNN')
想要的输出是这样的:
CN GN SG SN C CB
P1 9 6 0 020 AAABBB
P1 9 6 2 020 CCCDDD
P1 9 6 4 020 EEEFFF
P1 9 6 6 020 GGGHHH
P1 9 6 8 020 JJJLLLMMMNNN
因此,您将遍历由CN、GN、SG、SN 排序的所有行。从C 中第一次出现非空值开始。当下一行在列 C 中获得 NULL 值时,只要下一行在列 C 中不为 NULL,则连接 CB 值。
【问题讨论】:
-
到目前为止你有什么尝试?
-
我的想法与 row_number() 有关,但我失败了...
-
定义“关注”。表没有固有的顺序。我们应该使用哪一列来确定顺序?
-
对不起,我说是分组的,其实是有序的
-
我编辑了描述
标签: sql-server tsql sql-server-2017