我希望两个ID可以基于匹配/相似对字段值旋转到同一行。目前,ID仅在单个列中列出,我按PAIR字段的值进行排序。
下面是我当前正在运行的查询。
select ID,PAIR
from Table
where PAIR in
(select PAIR from Table
where ID in
(select ID
from review
where rule = 1234456
and trunc(RECVDDATE) = trunc(sysdate-1)
)
)
order by PAIR;
ID PAIR
4173910 1175
4423979 1175
4425330 17B5
4106895 17B5
4421153 E54E
3706124 E54E
6 rows selected.我希望这是我想要的结果。基本上是根据喜欢/匹配对的值旋转ID。
ID(1) ID(2)
4173910 4423979
4425330 4106895
4421153 3706124发布于 2019-06-20 22:27:40
根据您的确切需求(请参阅您的问题下面的我的评论),这可能会起作用:
(1)在ORDER BY PAIR之前添加GROUP BY PAIR。
(2)将SELECT子句修改为
select min(id) as id_1, case when max(id) != min(id) then max(id) end as id_2如果某些PAIR值只有一个ID,则存在CASE表达式-在这种情况下,ID_2不应重复ID_1中的值,而应为NULL。(无论如何,这就是PIVOT的工作方式。)
注意,这个解决方案没有使用PIVOT运算符;考虑到您已经拥有的内容,添加聚合会更简单。PIVOT需要将当前查询转换为子查询,然后在外部SELECT语句中进行旋转。
如果您愿意,为了简洁起见,您可以使用NULLIF(MAX(ID), MIN(ID))而不是CASE表达式;它的含义完全相同。
https://stackoverflow.com/questions/56687792
复制相似问题