如何在不创建分段 table 的情况下将行转置为 SQL 服务器中的列
How to transpose rows to columns in SQL SERVER without creating staging table
请帮我转置下面的内容 table,而不创建暂存 table。尝试过 PIVOT 但失败了。任何建议也会有所帮助。谢谢!
现有table:
时间
价值
2020/4/85:18
1
2020/4/85:22
0
2020/4/87:22
1
2020/4/87:31
0
2020/4/91:44
1
2020/4/91:50
0
想要的结果:
1
0
2020/4/85:18
2020/4/85:22
2020/4/87:22
2020/4/87:31
2020/4/91:44
2020/4/91:50
您可以枚举它们并汇总:
select max(case when value = 1 then time end) as value_1,
max(case when value = 0 then time end) as value_0
from (select t.*,
row_number() over (partition by value order by time) as seqnum
from t
) t
group by seqnum;
结合 ROW_NUMBER
window 函数和 PIVOT
:
试试这个解决方案
SELECT [0], [1]
FROM
(
SELECT Value, TIME, ROW_NUMBER() OVER (PARTITION BY Value ORDER BY TIME) Rb
FROM MyTable
) AS SourceTable
PIVOT
(
MAX(TIME)
FOR Value IN ([0], [1])
) AS PivotTable
请帮我转置下面的内容 table,而不创建暂存 table。尝试过 PIVOT 但失败了。任何建议也会有所帮助。谢谢!
现有table:
时间 | 价值 |
---|---|
2020/4/85:18 | 1 |
2020/4/85:22 | 0 |
2020/4/87:22 | 1 |
2020/4/87:31 | 0 |
2020/4/91:44 | 1 |
2020/4/91:50 | 0 |
想要的结果:
1 | 0 |
---|---|
2020/4/85:18 | 2020/4/85:22 |
2020/4/87:22 | 2020/4/87:31 |
2020/4/91:44 | 2020/4/91:50 |
您可以枚举它们并汇总:
select max(case when value = 1 then time end) as value_1,
max(case when value = 0 then time end) as value_0
from (select t.*,
row_number() over (partition by value order by time) as seqnum
from t
) t
group by seqnum;
结合 ROW_NUMBER
window 函数和 PIVOT
:
SELECT [0], [1]
FROM
(
SELECT Value, TIME, ROW_NUMBER() OVER (PARTITION BY Value ORDER BY TIME) Rb
FROM MyTable
) AS SourceTable
PIVOT
(
MAX(TIME)
FOR Value IN ([0], [1])
) AS PivotTable