我有以下数据表:
A B
=== ===
M 2
M 3
M 5
N 5
N 2
O 6
P 13
P 7
P 9
P 11
P 3
Run Code Online (Sandbox Code Playgroud)
现在我需要一个PIVOT(?)查询:
结果将是:
A B1 B2 B3
=== ==== ==== ====
M 2 3 5
N 2 5 null
O 6 null null
P 3 7 9
Run Code Online (Sandbox Code Playgroud)
到目前为止,我一直在尝试用TOP,GROUP BY,PIVOT创建查询.我认为最好的方法是使用PIVOT,但由于我没有值,我可以用作列名,我被卡住了.此外,对这些值进行前3选择似乎也非常具有挑战性.
*编辑*
它们是A列和B列的唯一约束,因此B的值对于相同的A始终是唯一的.
你可以使用PIVOT函数来获得结果,但我也会实现类似于row_number()
获得最终结果的窗口函数.如果在列上对数据进行分区,该row_number()
函数将为每个B
值创建唯一的序列号A
.此序列号将用作新列名:
select a, B1, B2, B3
from
(
select a, b,
row_number() over(partition by a
order by b) seq
from yourtable
) d
pivot
(
max(b)
for seq in ('1' as B1, '2' as B2, '3' as B3)
) piv;
Run Code Online (Sandbox Code Playgroud)
请参阅SQL Fiddle with Demo.这将得到一个结果:
| A | B1 | B2 | B3 |
|---|----|--------|--------|
| M | 2 | 3 | 5 |
| N | 2 | 5 | (null) |
| O | 6 | (null) | (null) |
| P | 3 | 7 | 9 |
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
194 次 |
最近记录: |