SQL Server 2014:一列到行数较少的多列,如何旋转 table?
SQL Server 2014: one column to multiple columns with less rows, how to pivot a table?
我想将一列拆分为多列并合并一些列。如何在 SQL Server 2012 中进行修改?
输入
| Cust | Q | Val |
------------------------------------
| 1 | 1 | 10 |
| 2 | 2 | 20 |
| 1 | 2 | 30 |
| 4 | 4 | 40 |
| 4 | 1 | 400 |
| 4 | 2 | 4000 |
输出:如何从输入得到这里?
| Cust | ValQI | ValQII | ValQIII | VALQIV |
-----------------------------------------------------------------
| 1 | 10 | 30 | | |
| 2 | | 20 | | |
| 3 | | | | |
| 4 | 400 | 4000 | | 40 |
您可以在 SQL 服务器中使用 pivot 在 SQL 服务器中像这样转置数据..
;with cte as (
select cust, RowN = Row_Number() over (partition by cust order by q), val from #yourPivot )
select * from cte
pivot (max(val) for RowN in ([1],[2], [3],[4])) p
您的输入table:
create table #yourPivot (cust int, Q int, Val int)
insert into #yourPivot (cust, q, val) values
( 1 , 1 , 10 )
,( 2 , 2 , 20 )
,( 1 , 1 , 30 )
,( 4 , 4 , 40 )
,( 4 , 1 , 400 )
,( 4 , 2 , 4000 )
组合 PIVOT 和 LEFT OUTER JOIN
WITH C AS
(
SELECT *
FROM (VALUES (1), (2), (3), (4)) AS T(Cust)
)
SELECT C.Cust, [1] AS ValQI, [2] AS ValQII, [3] AS ValQIII, [4] AS ValQIV
FROM C
LEFT OUTER JOIN
(
SELEcT *
FROM
(VALUES
(1, 1, 10),
(2, 2, 20),
(1, 2, 30),
(4, 4, 40),
(4, 1, 400),
(4, 2, 4000)
) AS T(Cust, Q, Val)
PIVOT (MAX([Val]) FOR [Q] IN ([1], [2], [3], [4])) AS P
) AS TT ON C.Cust = TT.Cust
我想将一列拆分为多列并合并一些列。如何在 SQL Server 2012 中进行修改?
输入
| Cust | Q | Val |
------------------------------------
| 1 | 1 | 10 |
| 2 | 2 | 20 |
| 1 | 2 | 30 |
| 4 | 4 | 40 |
| 4 | 1 | 400 |
| 4 | 2 | 4000 |
输出:如何从输入得到这里?
| Cust | ValQI | ValQII | ValQIII | VALQIV |
-----------------------------------------------------------------
| 1 | 10 | 30 | | |
| 2 | | 20 | | |
| 3 | | | | |
| 4 | 400 | 4000 | | 40 |
您可以在 SQL 服务器中使用 pivot 在 SQL 服务器中像这样转置数据..
;with cte as (
select cust, RowN = Row_Number() over (partition by cust order by q), val from #yourPivot )
select * from cte
pivot (max(val) for RowN in ([1],[2], [3],[4])) p
您的输入table:
create table #yourPivot (cust int, Q int, Val int)
insert into #yourPivot (cust, q, val) values
( 1 , 1 , 10 )
,( 2 , 2 , 20 )
,( 1 , 1 , 30 )
,( 4 , 4 , 40 )
,( 4 , 1 , 400 )
,( 4 , 2 , 4000 )
组合 PIVOT 和 LEFT OUTER JOIN
WITH C AS
(
SELECT *
FROM (VALUES (1), (2), (3), (4)) AS T(Cust)
)
SELECT C.Cust, [1] AS ValQI, [2] AS ValQII, [3] AS ValQIII, [4] AS ValQIV
FROM C
LEFT OUTER JOIN
(
SELEcT *
FROM
(VALUES
(1, 1, 10),
(2, 2, 20),
(1, 2, 30),
(4, 4, 40),
(4, 1, 400),
(4, 2, 4000)
) AS T(Cust, Q, Val)
PIVOT (MAX([Val]) FOR [Q] IN ([1], [2], [3], [4])) AS P
) AS TT ON C.Cust = TT.Cust