这真是一个奇怪的情况。我需要将两个记录配对到单个记录中作为项目1和项目2.任何人都可以帮助我吗? 这是我的方案
Table
-----
ItemID ItemName ItemPrice
--------------------------
1 Item 1 1500
2 Item 2 500
3 Item 3 520
4 Item 4 2500
5 Item 5 1400
我需要将整个表分成一半并将其配对为
Result
----------
ItemID1 ItemName1 ItemPrice1 ItemID2 ItemName2 ItemPrice2
1 Item 1 1500 2 Item 2 500
3 Item 3 520 4 Item 4 2500
5 Item 5 1400 -- -- --
我尝试了全加入。但它不与物品配对。我相信我们可以用COLESCE做到这一点。但是,我并不确切知道如何用单桌做。我正在尝试。感谢一点帮助。
答案 0 :(得分:3)
您可以使用row_number执行此操作:
select
max(case when COL = 1 then ItemID end) as ItemID1,
max(case when COL = 1 then ItemName end) as ItemName1,
max(case when COL = 1 then ItemPrice end) as ItemPrice1,
max(case when COL = 0 then ItemID end) as ItemID2,
max(case when COL = 0 then ItemName end) as ItemName2,
max(case when COL = 0 then ItemPrice end) as ItemPrice2
from
(
select
row_number() over (order by ItemID asc) % 2 as COL,
(row_number() over (order by ItemID asc) + 1) / 2 as ROWGRP,
ItemID,
ItemName,
ItemPrice
from
table1
) X
group by
ROWGRP
第一行编号%2分配列,第二行编号+ 1将新创建的行分配给新行(1,1,2,2,3,3 ...),以便数据可以是按其分组。
中的示例答案 1 :(得分:2)
正如我在评论中所写,你应该强烈考虑这是否真的是一个UI任务的RDBMS任务,但无论如何,这可能对你有用:
SELECT odd.*, even.*
FROM MyTable odd LEFT JOIN MyTable even
ON odd.ItemID == even.ItemID - 1
WHERE odd.ItemID % 2 = 1