2016-10-04 17 views
-2

我正在使用SQL Server 2012並且不確定是否處理問題的最佳方式。這是我的數據:SQL Server陣列或動態字段標題或數據透視表

Item Size SortOrder Qty 
ABC XS  1   0 
ABC S  2   8 
ABC M  3   4 
ABC L  4   3 
ZXY 1  1   10 
DEF 6  1   5 
DEF 8  2   4 
DEF 10  3   7 
DEF 12  4   6 
QWE 1  1   5 

不過,我需要出示它在網格格式和大小需要動態改變的標題:

ABC XS S M L 
Qty 0 8 4 3 
ZXY 1 
Qty 10 
DEF 6 8 10 12 
Qty 5 4 7  6 
QWE 1 
Qty 5 

此外,我需要分配數量,以適當的大小並且尺寸必須始終按排序順序從左到右顯示。

什麼將是最好的方法?創建數組還是我可以在樞軸上實現上述?

謝謝。

我嘗試使用下面的轉動,但保持收到錯誤「無效列名‘項目’:

DECLARE @SizeColums VARCHAR(MAX) 
SELECT @SizeColums = COALESCE(@SizeColums + ',','') + QUOTENAME([Size]) 
FROM vw_SizeSeq 
GROUP BY [Size] 

DECLARE @Sql NVARCHAR(MAX) = N' 
    SELECT Item, 
      [Types],' + 
      @SizeColums + ' 
    FROM (SELECT * FROM vw_SizeSeq 
    ) t 
    UNPIVOT ( 
     [Type] 
     FOR [Types] IN ([Item])) up 
    PIVOT (
     MAX([Type]) 
     FOR [Size] IN (' + @SizeColums + ') 
    ) p 
' 

EXEC sp_executesql @sql; 
+0

在SQL中,我們只能以表格格式生成結果,但您的預期結果看起來有所不同。嘗試應用層爲這個 –

+0

他們必須是一種方式樞軸和unpivot – Michael

+0

可能是不理解您的預期結果格式。你能否讓它更清晰 –

回答

0

不漂亮,但我想也許這可能工作

Declare @XML xml = (Select Item,Size,SortOrder,Qty=isnull(Qty,0) from YourTable for XML RAW),@SQL varchar(max) = '' 

-- Create SQL for columns 
Select @SQL = @SQL+',Col'+cast(SortOrder as varchar(25))+' = max(case when ColNr='+cast(SortOrder as varchar(25))+' then Value else '''' end)'+char(13) 
From (Select Distinct SortOrder From YourTable) A Order by SortOrder 

-- Normalize Data 
Select Itm  = r.value('@Item','varchar(25)') 
     ,ColNr  = r.value('@SortOrder','int') 
     ,Attribute = attr.value('local-name(.)','varchar(100)') 
     ,Value  = attr.value('.','varchar(max)') 
Into #Temp 
From @XML.nodes('/row') as A(r) 
Cross Apply A.r.nodes('./@*') AS B(attr) 
Where attr.value('local-name(.)','varchar(100)') not in ('Item','SortOrder') 

-- Create Final SQL and Execute 
Set @SQL = 'Select Item=case when Attribute=''Qty'' then '''' else Itm end'[email protected]+' From #Temp Group By Itm,Attribute Order By Itm,Attribute Desc' 
Exec(@SQL) 

返回

Item Col1 Col2 Col3 Col4 
ABC  XS  S  M  L 
     0  8  4  3 
DEF  6  8  10  12 
     5  4  7  6 
QWE  1   
     5   
ZXY  1   
     10   
+0

感謝您的。我沒有得到相同的結果 - 我得到的項目是正確的左邊的項目,然後所有可能的排序順序號碼作爲列標題 - 我需要這些是項目大小。 – Michael

+0

不可以。每個項目可以有不同的尺寸範圍。在頂部的原始數據中,項目ABC的大小爲XS \ S \ M \ L,DEF的大小爲6 \ 8 \ 10 \ 12 ZXY僅在大小1中,QWE僅在大小1中。這些都需要動態列標題 – Michael

+0

4行是,加上大小下的數量。我只想顯示尺寸,如果該項目的尺寸存在,雖然像我的原始文章的第二部分的結果 – Michael