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分钟。我会更新这个问题的