0

表 A:

Brand     Product
------------------
A            X
A            XX
A            XXX
B            Y
B            YY
C            Z

以下の表に示すデータが必要です。

A      B      C
-------------------
X      Y      Z
XX     YY     NULL   
XXX    NULL   NULL   

Sql Server 2008 でそれを行う方法は?

4

2 に答える 2

3

私はPIVOTがあなたがここで探しているものだとは信じていません。

行を生成するためにエントリを使用していることがわかりますか?

また、PIVOTは集計関数を使用しているため、これが発生していることはわかりません。

あなたが試すことができるのは、

DECLARE @Table TABLE(
        Brand VARCHAR(10),
        Product VARCHAR(10)
)

INSERT INTO @Table SELECT 'A','X '
INSERT INTO @Table SELECT 'A','XX' 
INSERT INTO @Table SELECT 'A','XXX'
INSERT INTO @Table SELECT 'B','Y' 
INSERT INTO @Table SELECT 'B','YY' 
INSERT INTO @Table SELECT 'C','Z' 

;WITH Vals AS (
        SELECT  *,
                ROW_NUMBER() OVER(PARTITION BY Brand ORDER BY (SELECT NULL)) RID
        FROM    @Table
)
, RIDs AS (
        SELECT  DISTINCT
                RID
        FROM    Vals
)
SELECT  vA.Product [A],
        vB.Product [B],
        vC.Product [C]
FROM    RIDs r LEFT JOIN
        Vals vA ON  r.RID = vA.RID
                AND vA.Brand = 'A' LEFT JOIN
        Vals vB ON  r.RID = vB.RID
                AND vB.Brand = 'B' LEFT JOIN
        Vals vC ON  r.RID = vC.RID
                AND vC.Brand = 'C'
于 2012-08-17T04:34:19.063 に答える
1

遅いエントリであることはわかっていますが、これを解決する別のアプローチを次に示します。

DECLARE @Table TABLE(Brand VARCHAR(10), Product VARCHAR(10)) 
INSERT INTO @Table SELECT 'A','X ' 
INSERT INTO @Table SELECT 'A','XX'  
INSERT INTO @Table SELECT 'A','XXX' 
INSERT INTO @Table SELECT 'B','Y'  
INSERT INTO @Table SELECT 'B','YY'  
INSERT INTO @Table SELECT 'C','Z'  

SELECT [A],[B],[C] FROM (
SELECT row_number() over (partition by brand order by product) rn,  
Product, brand FROM @table
) as p
PIVOT(
  MAX(product) for Brand in ([A],[B],[C])
)as pvt 
于 2012-08-17T09:25:21.150 に答える