我有一张table,上面可以放一到四盏路灯。每行都有一个杆id和路灯的类型(描述)。我需要的id是唯一的,每一个可能的路灯列。类型/描述可以是26个字符串中的任意一个。
我有这样的想法:
ID Description
----------------
1 S 400
1 M 200
1 HPS 1000
1 S 400
2 M 400
2 S 250
3 S 300
我需要的是:
ID Description_1 Description_2 Description_3 Description_4
------------------------------------------------------------------
1 S 400 M 200 HPS 1000 S 400
2 M 400 S 250
3 S 300
描述在描述列中填充的顺序并不重要,例如,对于id=1,hps 1000值可能在描述列1、2、3或4中。所以,只要所有的值都存在。
我试着转动它,但我不认为这是正确的工具。
select * from table t
pivot (
max(Description) for ID in (1, 2, 3))
因为有~3000个ID,我最终会得到一个~3001行宽的表。。。
我还研究了这个oraclesql交叉表查询,但情况并不完全相同。
解决这个问题的正确方法是什么?
1条答案
按热度按时间kupeojn61#
你可以用
row_number()
和条件聚合:这最多可以处理4个描述
id
. 要处理更多内容,只需扩展select
多条件从句max()
s。