如何从表中选择记录作为一对

时间:2015-07-05 10:48:07

标签: sql-server join

这真是一个奇怪的情况。我需要将两个记录配对到单个记录中作为项目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做到这一点。但是,我并不确切知道如何用单桌做。我正在尝试。感谢一点帮助。

2 个答案:

答案 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 ...),以便数据可以是按其分组。

SQL Fiddle

中的示例

答案 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