2010-01-25 54 views
1

HI,預期或類似的輸出

如下所示

ItemCode  Attr1 Attr1 InStock 
ITEM-000001 43  S  1 
ITEM-000001 52  L 2 
ITEM-000006 42  R 1 
ITEM-000006 44  R 2 
ITEM-000009 56  R 1 
ITEM-000011 40  R 2 

,並通過使用透視表(或任何其它技術)我有數據,我想等作爲

輸出爲reslut ITEM-000001 S 1
L 2 其他人也一樣。

親切的問候,嗡

+0

你需要闡述。源表有兩個名爲「Attr1」的列? ITEM-000001有三行時會發生什麼? – 2010-01-25 15:24:43

+0

對不起它是一個ATTR1&ATTR2 輸出繼電器會喜歡 輸出爲ITEM-000001 S1中 大號2 同他人。 – 2010-01-25 15:34:43

回答

1

您好我得到了上述觀點,這將改變列的數據工作的解決方案,即ATTR1 & ATTR2

解決方案低於:

CREATE TABLE #Aggregates 
      (
       [On Hand] VARCHAR(50), 
       ColumnText VARCHAR(50), 
       CellData INT 
      ) 

INSERT INTO #Aggregates 
      (
      [On Hand], 
      ColumnText, 
      CellData 
      ) 
SELECT ISNULL(matrixItem.Attribute2, '--'), matrixItem.Attribute1, item.UnitsInStock 
FROM InventoryMatrixItemView AS matrixItem LEFT OUTER JOIN 
     InventoryItemView AS item ON matrixItem.MatrixItemCode = item.ItemCode 
WHERE (matrixItem.Selected = 1 AND matrixItem.ItemCode = @itemCode) 

CREATE TABLE #Columns 
      (
      ColumnIndex INT IDENTITY (0, 1), 
      ColumnText VARCHAR(50) 
      ) 

INSERT INTO  #Columns 
       (
       ColumnText 
       ) 
SELECT DISTINCT ColumnText 
FROM   #Aggregates 
ORDER BY  ColumnText 

CREATE TABLE #Rows 
      (
       [On Hand] VARCHAR(50) 
      ) 

INSERT INTO #Rows 
       (
       [On Hand] 
       ) 

SELECT DISTINCT [On Hand] 
FROM #Aggregates with(nolock) 

DECLARE  @ColumnIndex INT, 
      @MaxColumnIndex INT, 
      @ColumnText VARCHAR(50), 
      @SQL VARCHAR(1000) 

SELECT  @ColumnIndex = 0, 
      @MaxColumnIndex = MAX(ColumnIndex) 
FROM  #Columns 


WHILE @ColumnIndex <= @MaxColumnIndex 
    BEGIN 
     SELECT  @ColumnText = ColumnText 
     FROM  #Columns 
     WHERE  ColumnIndex = @ColumnIndex 

     SELECT  @SQL = 'ALTER TABLE #Rows ADD ' + QUOTENAME(@ColumnText) + ' INT NULL DEFAULT 0' 
     EXEC  (@SQL) 

     SELECT  @SQL = 'UPDATE #Rows SET ' + QUOTENAME(@ColumnText) + ' = #Aggregates.CellData 
         FROM #Aggregates, #Columns 
         WHERE #Rows.[On Hand] = #Aggregates.[On Hand] 
         AND #Columns.ColumnText = #Aggregates.ColumnText 
         AND #Columns.ColumnIndex = ' + CAST(@ColumnIndex AS VARCHAR(12)) 
     EXEC  (@SQL) 

     SELECT @ColumnIndex = @ColumnIndex + 1 
    END 

DROP TABLE #Columns 
DROP TABLE #Aggregates 

SELECT  #Rows.* 
FROM  #Rows 
ORDER BY #Rows.[On Hand] 

DROP TABLE #Rows