我有一张像这样的桌子
RowNum | TranNo | nTotalSales | nBalance
1 | 1 | 800 | 0
我想以这种方式显示它
RowNum | 1
cTranNo | 1
nTotalSales | 800
nBalance | 0
我怎样才能做到这一点?
我有一张像这样的桌子
RowNum | TranNo | nTotalSales | nBalance
1 | 1 | 800 | 0
我想以这种方式显示它
RowNum | 1
cTranNo | 1
nTotalSales | 800
nBalance | 0
我怎样才能做到这一点?
这是一个完整的工作示例,当您执行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;
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
这不是很有趣,但这里有一个解决方案:
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