2012-02-10 12 views
0

は、私はこの1つ列を行に変換する方法は?

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

のようなテーブルがあると私はこの方法

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

私はこれをどのように操作を行うことができ、それを表示するようにしたいですか?

+1

これは「ピボット」と正しくタグ付けされています。なぜそれらの質問を見ていないのですか? –

+0

これらの質問に記載されている例に混乱するので、「ピボットの例」https://www.google.com/search?q=pivot+examples – JSuar

+0

を検索するだけです。私は自分自身を作りたいと思っていました。私を助けてください。 – illumi

答えて

2

は、完全な実施例である。このようになります

あなたが望むようにキャストしてください。私の例では、すべて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

面白い答えですが、私はこの問題を解決するときにエラーが発生します: "WITH T AS(RowNum、cTranNo、nTotalSales、nBalanceをtran_ar_siから選択)" – illumi

+0

"タイプ" cTranNo " UNPIVOTリストに指定されている他の列のうちの1つです。 - エラーメッセージです。 – illumi

+0

@dave、 - UNPIVOTはあなたが求めているものです、私の友人。 'WITH T AS(...')文を使用する必要はありません。これは単なる動作例です。私の例全体を単独で実行するとうまくいくでしょう。 'あなたのソーステーブルとして(...')あなたがそれ以上の明確化を必要としているかどうかを教えてください。 –

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 

行に列をオンにします。列の各行がインターレースされるようにするには、ソートと一緒にレコード番号を導入する必要があります。あなたは、あなたの「値」型が同じであるように、あなたが求めているものですUNPIVOT、必要ないときここ

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

関連する問題