0

このようなテーブルがあります

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

このように表示したい

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

これどうやってするの?

4

3 に答える 3

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;
于 2012-02-10T02:33:39.927 に答える
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
于 2012-02-10T02:33:11.680 に答える
1

それは本当に楽しいことではありませんが、ここに 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
于 2012-02-10T02:33:13.707 に答える