SQL为列A行1选择值,然后从列B行1中选择值,然后选择列A行2 ...全部在不同的行上

时间:2018-05-30 21:45:01

标签: sql sql-server

我已执行查询以创建成对的事件组合,并将该对作为单行。请参阅下面的链接了解输出。第1列是第一个事件的ID,第2列是配对事件的ID。

我需要获取此输出,然后将其传输到只有一列的行。所以基本上,第1行和第2行是一对,第3行和第4行是一对,等等。下面第二个链接中所需输出的快照。

在SSMS工作。

谢谢!

Query Output

Desired Output

2 个答案:

答案 0 :(得分:0)

这是一个相当奇怪的结果,因为排序似乎相当随意。此外,您的原始数据没有稳定的订购。但我认为以下内容与您想要的非常接近:

select v.a
from t cross apply
     (values (fid, 1), (sid, 2)) v(a, ord)
order by t.occurrencedate, t.fid, t.sid, v.a, v.ord

答案 1 :(得分:0)

您的原始订单似乎是(fid, sid)

下面的

CROSS APPLY实际上为每个原始行生成两行。 因此,我们按(fid, sid)保留原始订单,并确保列fid的值排在第一位,而sid的值排在第二位,添加SortOrder列。

SELECT
    CA.ID
FROM 
    YourTable
    CROSS APPLY
        (VALUES (fid, 1), (sid, 2)) CA(ID, SortOrder)
ORDER BY
    YourTable.fid,
    YourTable.sid,
    CA.SortOrder;
相关问题