2012-02-10 91 views
0

我有這樣一個如何將列轉換爲行?

RowNum | TranNo | nTotalSales | nBalance 
    1 | 1 | 800  | 0 

一個表,我想以顯示它這樣

RowNum  | 1 
cTranNo  | 1 
nTotalSales | 800 
nBalance | 0 

我怎樣才能做到這一點?

+1

您將此標記爲「pivot」,這是正確的。爲什麼不看這些問題? – 2012-02-10 02:30:06

+0

所有你需要做的是搜索「數據透視示例」https://www.google.com/search?q=pivot+examples – JSuar 2012-02-10 02:32:03

+0

,因爲我很困惑這些問題中給出的例子。所以我希望創造我自己的。請幫幫我。 – illumi 2012-02-10 02:32:10

回答

2

下面是一個完整的工作例如,當你這樣做的UNPIVOT,這是你在問什麼,你的「價值」的類型必須是相同的類型,所以不管你想要什麼都可以。在我的例子中,我將它們全部轉換爲VARCHAR(20):

DECLARE @bob TABLE 
(
    RowNum INT, 
    TranNo INT, 
    nTotalSales INT, 
    nBalance INT 
); 
INSERT INTO @bob(RowNum, TranNo, nTotalSales, nBalance) 
VALUES(1, 1, 800, 0); 


WITH T AS (
    SELECT CAST(RowNum  AS VARCHAR(20)) AS RowNum, 
      CAST(TranNo  AS VARCHAR(20)) AS TranNo, 
      CAST(nTotalSales AS VARCHAR(20)) AS nTotalSales, 
      CAST(nBalance AS VARCHAR(20)) AS nBalance 
    FROM @bob 
) 

SELECT attribute, value 
FROM T 
UNPIVOT(value FOR attribute IN(RowNum, TranNo, nTotalSales, nBalance)) AS U; 
+0

有趣的答案,但我有一個錯誤,當我修改'與'區域:「與T AS(從tran_ar_si選擇RowNum,cTranNo,nTotalSales,nBalance)」 – illumi 2012-02-10 02:45:54

+0

「列的類型」cTranNo「與類型在UNPIVOT列表中指定的其他列。「 - 那是錯誤信息。 – illumi 2012-02-10 02:48:31

+0

@dave, - 我的朋友,'UNPIVOT'就是你要求的。你不需要使用我的'WITH T AS(...'語句,這只是一個工作的例子,如果你自己運行我的整個例子,那麼它就可以正常工作,如果你想用你的表格考慮'用T AS(...'作爲你的源表 - 讓我知道如果你需要進一步澄清 – 2012-02-10 03:06:50

1
SELECT 'RowNum' TITLE, RowNum AS [VALUE] 
FROM TABLE 
UNION ALL 
SELECT 'TranNo', TranNo 
FROM TABLE 
UNION ALL 
SELECT 'nTotalSales', nTotalSales 
FROM TABLE 
UNION ALL 
SELECT 'nBalance', nBalance 
FROM TABLE 
1

這不是真正的樂趣,但這裏有一個解決辦法:

SELECT 'RowNum', RowNum FROM tbl 
UNION 
SELECT 'cTranNo', TranNo FROM tbl 
UNION 
SELECT 'nTotalSales', nTotalSales FROM tbl 
UNION 
SELECT 'nBalance', nBalance FROM tbl 

這將開啓列成行。如果您希望每個列行都是交錯的,則可能需要引入一個記錄編號以及一些排序。

這將是這樣的:

SELECT 'RowNum' AS ColName, RowNum AS [Value], RowNum FROM tbl 
    UNION 
    SELECT 'cTranNo' AS ColName, TranNo, RowNum FROM tbl 
    UNION 
    SELECT 'nTotalSales' AS ColName, nTotalSales, RowNum FROM tbl 
    UNION 
    SELECT 'nBalance' AS ColName, nBalance, RowNum FROM tbl 
    ORDER BY RowNum, ColName 
+0

感謝您的答案,但我怎麼能使這種動態? – illumi 2012-02-10 02:34:47