Tsql 将多行合并为一行
我正在尝试将多行合并为一行 首先是一些测试数据Tsql 将多行合并为一行,tsql,Tsql,我正在尝试将多行合并为一行 首先是一些测试数据 declare @Customers table ( CustomerID varchar(200), SubscriptionId varchar(200), OpusNr varchar(200), LineType varchar(1), ProductFrame varchar(200), Frame varchar(200), ProductLeftLens varchar(200
declare @Customers table
(
CustomerID varchar(200),
SubscriptionId varchar(200),
OpusNr varchar(200),
LineType varchar(1),
ProductFrame varchar(200),
Frame varchar(200),
ProductLeftLens varchar(200),
LeftLens varchar(200),
ProductRightLens varchar(200),
RightLens varchar(200)
);
insert into @Customers values ('17762697', '270387', '6214005562', 'F', '304', 'GG0550O/006/5316/140', '304', 'Variview Standard M 1.6 70/75', '304', 'Variview Standard M 1.6 70/75')
insert into @Customers values ('17762697', '270387', '6214005562', 'L', '101', 'GG0550O/006/5316/140', '101', 'Variview Standard M 1.6 70/75', '101', 'Variview Standard M 1.6 70/75')
insert into @Customers values ('17762697', '270387', '6214005562', 'R', '303', 'GG0550O/006/5316/140', '303', 'Variview Standard M 1.6 70/75', '303', 'Variview Standard M 1.6 70/75')
结果呢
我想把这些行合并成一行
如果LineType='F',则我需要ProductFrame和Frame中的值
如果线型='L',则我需要ProductLeftLens中的值
和左镜头
如果线型='R',则我需要ProductRightLens和RightLens的值
在这里,我已经在我的解调器上手工完成了合并
是在SQL server 2017上这应该可以做到:
SELECT
CustomerID,
SubscriptionId = MAX(c.SubscriptionId),
OpusNr = MAX(c.OpusNr),
ProductFrame = MAX(CASE c.LineType WHEN 'F' THEN c.ProductFrame END),
Frame = MAX(c.Frame),
ProductLeftLens = MAX(CASE c.LineType WHEN 'L' THEN c.ProductLeftLens END),
LeftLens = MAX(c.LeftLens),
ProductRightLens = MAX(CASE c.LineType WHEN 'L' THEN c.ProductRightLens END),
RightLens = MAX(c.RightLens)
FROM @Customers AS c
GROUP BY c.CustomerID, c.SubscriptionId , c.OpusNr;
返回:
CustomerID SubscriptionId OpusNr ProductFrame Frame ProductLeftLens LeftLens ProductRightLens RightLens
------------ ---------------- ------------- ------------- ---------------------- ----------------- ------------------------------- ------------------- ---------------------------------
17762697 270387 6214005562 304 GG0550O/006/5316/140 101 Variview Standard M 1.6 70/75 101 Variview Standard M 1.6 70/75
MAX
和CASE
表达式?虽然所有这些行都有相同的值,那么为什么不干脆MAX
?@Larnu您是对的,在给定的示例中它会起作用。但我刚刚注意到我在纽约的测试数据中遗漏了一些重要的东西。等5分钟。我会更新这个问题的