2012-03-15 32 views
-1

我試圖編寫sql代碼來創建一個表,這是一個給定表的轉置。最初我有一個數據表。我正在嘗試創建一個使用sql server management studio的輸入表的轉置表。在sql server中的錶轉置?

plz幫助我....

輸入如下: tbl

輸出:

tbltr

回答

1
+0

感謝您的快速答覆.....我不需要任何列名和所有的一切......我需要的只是轉置給定表的數據.....如果這是什麼樞軸會做什麼,你可以嘗試解釋我的示例表.....我是新手到sql – krrish 2012-03-15 01:07:12

+0

通過轉置,做你的意思是你想旋轉你的桌子? – AFD 2012-03-15 01:09:48

+0

我只想旋轉表格數據...如圖所示,原始表格中的第一行是表格第一列的數據 – krrish 2012-03-15 01:11:25

0

像這樣的事情可能會做的伎倆:

測試數據

CREATE TABLE #tbl 
    (
     Y1 INT, 
     Y2 INT, 
     Y3 INT, 
     Y4 INT, 
     Y5 INT 
    ) 

INSERT INTO #tbl 
VALUES 
    (1,2,3,4,9), 
    (1,6,9,3,6), 
    (2,2,6,7,6) 

然後,我們需要知道X多少列在那裏。這得到的列:

DECLARE @nbrOf INT=(SELECT COUNT(*) FROM #tbl) 

DECLARE @cols VARCHAR(MAX) 
DECLARE @colsWithName VARCHAR(MAX) 

;WITH Nbrs (n) AS (
     SELECT 1 UNION ALL 
     SELECT 1 + n FROM Nbrs WHERE n <@nbrOf) 
SELECT 
    @cols = COALESCE(@cols + ','+QUOTENAME(n), 
        QUOTENAME(n)), 
    @colsWithName = COALESCE(@colsWithName + ','+QUOTENAME(n)+' AS X'+CAST(n AS VARCHAR(10)), 
        QUOTENAME(n)+' AS X'+CAST(n AS VARCHAR(10))) 
FROM 
    Nbrs 

然後,我們要做一些動態的數據透視表。就像這樣:

DECLARE @query NVARCHAR(4000)= 
N'SELECT 
    '[email protected]+' 
FROM 
    (
     SELECT 
      ROW_NUMBER() OVER(ORDER BY tbl.Y1) AS RowNbr, 
      tbl.Y1, 
      tbl.Y2, 
      tbl.Y3, 
      tbl.Y4, 
      tbl.Y5 
     FROM 
      #tbl AS tbl 
    ) AS p 
    UNPIVOT 
    (
     Value FOR Name IN 
     (Y1, Y2, Y3, Y4, Y5) 
    ) AS unpvt 
    PIVOT 
    (
     MAX(Value) 
     FOR RowNbr IN('[email protected]+') 
    ) AS pvt' 
EXECUTE(@query) 

然後在我的情況下,我會下降臨時表

DROP TABLE #tbl 
+0

感謝您的回覆,但我發現你的解決方案中有一些錯誤。如果列'Y1'的值的順序不是升序,則它將不起作用,因爲它使用Y1上的ROW_NUMBER()函數。 – krrish 2012-03-15 22:34:30

+0

這是真的。也許你有一個主鍵?因爲那我們可以按順序使用它。我們需要有人來確定什麼是第一個和最後一個x值。 – Arion 2012-03-15 23:06:56