Sorting/Splitting 一行中的一列分成不同的视图列

Sorting/Splitting a column into different view columns in one row

我在创建视图时遇到问题,该视图应将 table 的一列拆分为一行中的三个不同列。

数据 table 看起来类似于:

Table

我想要做的是为每个类型(类型的数量固定为三个)创建一个视图,其中三个 ID/序列号。相同大小的不同颜色(颜色数量也固定为三种)排成一排,像这样:

WantedView

附加数据(如重量等)位于此之后。

到目前为止我得到的是:

CREATE VIEW [dbo].[Typ1]
AS SELECT 
Size AS Size, 
CASE WHEN Color = 'Blue' THEN SerialNo END AS SerialNoBlue , 
CASE WHEN Color = 'Grey' THEN SerialNo END AS SerialNoGrey, 
CASE WHEN Color = 'Green' THEN SerialNo END AS SerialNo Green
FROM [Table] 
WHERE Typ = 'Typ1'

结果是这样的:

CurrentView

我的问题是是否有办法 "merge" X 列相同的行?

或者有完全不同的方法吗?

您需要一个条件聚合

CREATE VIEW [dbo].[Typ1]

AS SELECT Size AS Size,
          max(CASE WHEN Color = 'Blue' THEN SerialNo END) AS SerialNoBlue ,
          max(CASE WHEN Color = 'Grey' THEN SerialNo END) AS SerialNoGrey, 
          max(CASE WHEN Color = 'Green' THEN SerialNo END) AS SerialNo Green
FROM [Table] 
WHERE Typ = 'Typ1' group by Size

另一种方法是先按大小分组,然后用蓝色、灰色和绿色进行 3 个内部连接,如下所示:-

首先我会用内存table模拟你的数据如下(你不需要这个)

Declare @t Table (
ID int,
Size int,
SerialNo int,
Color varchar(20),
[Weight] int,
Typ varchar(20)
)
insert into @t values
(1,130,96043,'Blue',120,'Typ1'),
(2,130,96041,'Grey',120,'Typ1'),
(3,130,96055,'Green',120,'Typ1'),

(4,170,96096,'Blue' ,220,'Typ2'),
(5,170,96050,'Grey' ,220,'Typ2'),
(6,170,96040,'Green',220,'Typ2'),

(7,190,96042,'Blue' ,300,'Typ1'),
(8,190,96045,'Grey' ,300,'Typ1'),
(9,190,96070,'Green',300,'Typ1'),

(10,220,96080,'Blue' ,360,'Typ3'),
(11,220,96095,'Grey' ,360,'Typ3'),
(12,220,96093,'Green',360,'Typ3')

然后查询得到想要的结果(可以转换成视图)

;with cte as (
    Select t.Size from @t t group by t.Size
)
select cte.Size
    ,b.SerialNo [Serial no. Blue],b.ID [ID Blue]
    ,g.SerialNo [Serial no. Grey],g.ID [ID Grey]
    ,r.SerialNo [Serial no. Green],r.ID [ID Green]
    ,b.[Weight]
     from cte
    inner join @t b on b.Size=cte.Size and b.Color='Blue'
    inner join @t g on g.Size=cte.Size and g.Color='Grey'
    inner join @t r on r.Size=cte.Size and r.Color='Green'

输出将是:-

Size    S.B    ID.Blue  S.Gr    ID.Grey S.G    ID.Green Weight
130     96043   1       96041   2       96055   3       120
190     96042   7       96045   8       96070   9       300