首页 > 解决方案 > SQL 为 A 列第 1 行选择 vale,然后从 B 列第 1 行选择值,然后 A 列第 2 行...全部在单独的行上

问题描述

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

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

在 SSMS 工作。

谢谢!

查询输出

期望的输出

标签: sqlsql-server

解决方案


看起来您的原始订单是 by (fid, sid)

CROSS APPLY下面基本上为每个原始行生成两行。因此,我们通过添加(fid, sid)列来保留原始顺序,并确保列中的值排在fid第一位,而列中的值排在第二位。sidSortOrder

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

推荐阅读