如何加入/展平这些表格

Sco*_*ott 0 t-sql sql-server

我有这样一张桌子:

表名:PRODUCT

ID     PRODUCTID     PRODUCTNAME
1      D100          Sample Product
2      K500          Another sample product
Run Code Online (Sandbox Code Playgroud)

有一个相关的表,如下所示:

表名:COLORSIZE

ID     PRODUCTID     COLOR          S       M      L     XL
1      D100          Red            S       M      L 
2      D100          Black          S       M      L
3      D100          Blue           S       M      L
4      K500          Green                         L     XL
4      K500          Red                           L     XL
Run Code Online (Sandbox Code Playgroud)

一般规则是产品ID总是具有相同的尺寸,只是不同的颜色.因此,如果D100红色有S,M和L,则所有D100只有S,M和L.产品最多可以有20种颜色.

我需要编写一个输出以下内容的sql语句

PRODUCTSWITHCOLORS

ID     PRODUCT ID     PRODUCTNAME     COLOR1     COLOR2     COLOR3   S    M    L   XL
1      D100           Sample product  Red        Black      Blue     S    M    L
2      K500           Another sample  Green      Red                           L   XL
Run Code Online (Sandbox Code Playgroud)

"COLOR1","COLOR2"列需要转到"COLOR20"max或者它们需要以最大颜色数结束(例如,如果在查询中,产品的最大颜色数为4,那就没问题了停在COLOR4).

这不是一个理想的方法,但它是被要求的报告.谁能帮我写一个能完成这个的SQL语句?

谢谢!

pco*_*fre 6

如果您使用的是2005/2008版本的sql server,则可以使用PIVOT.为了停止最大颜色数,您可以动态构建此查询.这里有一些帮助:

;WITH ProductColor as(
select  a.ProductId,
        b.ProductName,
        a.Color,
        RANK() over (partition by ProductName order by a.Id) r
from    dbo.COLORSIZE a left join
        dbo.PRODUCT b on a.PRODUCTID=b.PRODUCTID
)
SELECT ProductId,ProductName,[1], [2], [3]
FROM 
(select ProductId,ProductName,Color,r
from    ProductColor) p
PIVOT
(
MIN (Color)
FOR r IN
( [1], [2], [3] )
) AS pvt;
Run Code Online (Sandbox Code Playgroud)