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

这不是很有趣,但这里有一个解决方案:

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 回答