Tsql SQL中的透视表(使用Groupby)
我的桌子结构如下Tsql SQL中的透视表(使用Groupby),tsql,Tsql,我的桌子结构如下 Customer_ID Sequence Comment_Code Comment 1 10 0 a 1 11 1 b 1 12 1 c 1 13 1 d 2 20
Customer_ID Sequence Comment_Code Comment
1 10 0 a
1 11 1 b
1 12 1 c
1 13 1 d
2 20 0 x
2 21 1 y
3 100 0 m
3 101 1 n
3 102 1 o
1 52 0 t
1 53 1 y
1 54 1 u
序号是表中的唯一编号
我希望SQL中的输出如下所示
Customer_ID Sequence
1 abcd
2 xy
3 mno
1 tyu
谁能帮我一下吗。如果需要,我可以提供更多细节
这看起来像是一个简单的缺口/孤岛问题
-- Sample Data
DECLARE @table TABLE
(
Customer_ID INT,
[Sequence] INT,
Comment_Code INT,
Comment CHAR(1)
);
INSERT @table
(
Customer_ID,
[Sequence],
Comment_Code,
Comment
)
VALUES (1,10 ,0,'a'),(1,11 ,1,'b'),(1,12 ,1,'c'),(1,13 ,1,'d'),(2,20 ,0,'x'),(2,21 ,1,'y'),
(3,100,0,'m'),(3,101,1,'n'),(3,102,1,'o'),(1,52 ,0,'t'),(1,53 ,1,'y'),(1,54 ,1,'u');
-- Solution
WITH groups AS
(
SELECT
t.Customer_ID,
Grouper = [Sequence] - DENSE_RANK() OVER (ORDER BY [Sequence]),
t.Comment
FROM @table AS t
)
SELECT
g.Customer_ID,
[Sequence] =
(
SELECT g2.Comment+''
FROM groups AS g2
WHERE g.Customer_ID = g2.Customer_ID AND g.Grouper = g2.Grouper
FOR XML PATH('')
)
FROM groups AS g
GROUP BY g.Customer_ID, g.Grouper;
返回:
Customer_ID Sequence
----------- ----------
1 abcd
1 tyu
2 xy
3 mno
注释代码“0”是否意味着它将是序列中的第一个字符?下面的答案是否有帮助?@GenWan yes。注释代码“0”表示它将是序列中的第一个字符。我们必须在注释字段中将所有内容分组,直到注释代码中出现下一个0。非常感谢,Alan。这对我帮助很大。我是SQL新手,所以我仍然在学习新东西。我还有最后一个问题,如果顺序不对,我们该怎么办。我的意思是中间缺少一个数字(对于客户1-10,11,15,16),但我们仍然希望将注释中的所有内容分组,直到注释代码中出现“0”。