交换列和行
Swap Columns And Rows
我有一个 table 这样的:
a | b | c
-------------
1 | 2 | 3
其中第一行是列名。我想交换整个 table 并转换为:
col | val
-----------
a | 1
b | 2
c | 3
如何在 T-SQL 中通过 Unpivot 执行此操作?
试试这个:
--Create YourTable
SELECT 1 AS a,
2 AS b,
3 AS c INTO YourTable
--Unpivot YourTable
SELECT unpvt.Col,
unpvt.Val
FROM YourTable
UNPIVOT
(Val for Col in (a,b,c)) unpvt
如果您有多种数据类型,那么您可以将列转换为 NVARCHAR,因为大多数数据类型都可以像这样转换为 NVARCHAR:
--Create YourTable
SELECT N'unicode text' AS a,
CAST(23123123 AS BIGINT)AS b,
CAST('20120101' AS DATE) AS c INTO YourTable
--Unpivot YourTable
SELECT unpvt.Col,
unpvt.Val
FROM
--Cast each column as NVARCHAR
(
SELECT CAST(a AS NVARCHAR(MAX)) a,
CAST(b AS NVARCHAR(MAX)) b,
CAST(c AS nvarchar(MAX)) c
FROM YourTable
) A
UNPIVOT
(Val for Col in (a,b,c)) unpvt
DROP TABLE YourTable
我有一个 table 这样的:
a | b | c
-------------
1 | 2 | 3
其中第一行是列名。我想交换整个 table 并转换为:
col | val
-----------
a | 1
b | 2
c | 3
如何在 T-SQL 中通过 Unpivot 执行此操作?
试试这个:
--Create YourTable
SELECT 1 AS a,
2 AS b,
3 AS c INTO YourTable
--Unpivot YourTable
SELECT unpvt.Col,
unpvt.Val
FROM YourTable
UNPIVOT
(Val for Col in (a,b,c)) unpvt
如果您有多种数据类型,那么您可以将列转换为 NVARCHAR,因为大多数数据类型都可以像这样转换为 NVARCHAR:
--Create YourTable
SELECT N'unicode text' AS a,
CAST(23123123 AS BIGINT)AS b,
CAST('20120101' AS DATE) AS c INTO YourTable
--Unpivot YourTable
SELECT unpvt.Col,
unpvt.Val
FROM
--Cast each column as NVARCHAR
(
SELECT CAST(a AS NVARCHAR(MAX)) a,
CAST(b AS NVARCHAR(MAX)) b,
CAST(c AS nvarchar(MAX)) c
FROM YourTable
) A
UNPIVOT
(Val for Col in (a,b,c)) unpvt
DROP TABLE YourTable