2015-05-04 47 views
2

這是我的基本表:TSQL - 查看跨應用和數據透視

docID | rowNumber | Column1 | Column2 | Column3 

我使用交叉應用和樞軸,以在列1變換的記錄,以實際列和使用列2的值和欄3作爲記錄新的專欄。在我的fiddle中,您可以看到base和轉換後的select語句。

我有被編號等植物和顏色的列,例如Plant1,Plant2,Plant3,COLOR1,COLOR2等

對於存在於所有植物列我想創建一個新的行用逗號分隔每個植物中分離,在一個單列的顏色列表。

我想實現也就是在下面的截圖:

input-output

這應成爲在Excel中使用視圖。我如何修改視圖以獲得所需的結果?

附加的問題:該長度列是數字。有什麼方法可以將Excel中的小數分隔符作爲用戶切換並將其應用於此數值列或所有數值列,以便Excel將其識別爲數字? 我曾經有一箇舊的PHP網絡查詢,我會從Excel中的下拉單元格作爲參數傳遞分隔符。

謝謝。

+0

一個更大的圖景將是很大的幫助 – NickyvV

+0

右鍵單擊圖像 - > 「顯示圖片」 什麼的。它會變得更大:-) –

回答

2

首先,人您的數據存儲方式是一個爛攤子。如果可以的話,我會建議閱讀好數據結構並修復你的問題。這是一個TSQL查詢,它以正確的格式爲您提供數據。

WITH CTE_no_nums 
AS 
(
SELECT docID, 
     CASE 
      WHEN PATINDEX('%[0-9]%',column1) > 0 
       THEN SUBSTRING(column1,0,PATINDEX('%[0-9]%',column1)) 
      ELSE column1 
     END AS cols, 
     COALESCE(column2,column3) AS vals 
FROM miscValues 
WHERE  column2 IS NOT NULL 
     OR column3 IS NOT NULL 
), 
CTE_Pivot 
    AS 
    (
    SELECT docID,partNumber,prio,[length],material 
    FROM CTE_no_nums 
    PIVOT 
    (
     MAX(vals) FOR cols IN (partNumber,prio,[length],material) 
    ) pvt 
) 

SELECT A.docId + ' # ' + B.vals AS [DocID # Plant], 
     A.docID, 
     A.partNumber, 
     A.prio, 
     B.vals AS Plant, 
     A.partNumber + '#' + A.material + '#' + A.[length] AS Identification, 
     A.[length], 
     SUBSTRING(CA.colors,0,LEN(CA.colors)) colors --substring removes last comma 
FROM CTE_Pivot A 
INNER JOIN CTE_no_nums B 
    ON  A.docID = B.docID 
     AND B.cols = 'Plant' 
CROSS APPLY ( SELECT vals + ',' 
       FROM CTE_no_nums C 
       WHERE cols = 'Color' 
        AND C.docID = A.docID 
       FOR XML PATH('') 
      ) CA(colors) 

結果:

DocID # Plant docID partNumber prio Plant  Identification  length colors 
---------------- ------ ---------- ---- ---------- ------------------ ------- ------------------------- 
D0001 # PlantB D0001 X001  1 PlantB  X001#MA123#10.87 10.87 white,black,blue 
D0001 # PlantC D0001 X001  1 PlantC  X001#MA123#10.87 10.87 white,black,blue 
D0002 # PlantA D0002 X002  2 PlantA  X002#MA456#16.43 16.43 black,yellow 
D0002 # PlantC D0002 X002  2 PlantC  X002#MA456#16.43 16.43 black,yellow 
D0002 # PlantD D0002 X002  2 PlantD  X002#MA456#16.43 16.43 black,yellow 
+1

真的很漂亮。非常感謝Stephan!我知道數據很混亂,但不幸的是我對此沒有任何影響。 –

+1

如果添加兩個像Color12這樣的數字的植物和顏色「列」,我該如何修改子字符串函數? –

+0

我想到了Tony。這是平常的。有人弄得一團糟,然後其他人被卡住了。至於兩位數字,對此感到遺憾。我在PATINDEX()中忘了通配符'%'。現在,它應該適用於任意數量的數字。 – Stephan