我有一个来自上一个查询的两列TABLE,如下所示:
+--------+--------+
| Id_no1 | Id_no2 |
+--------+--------+
| 1 | 2 |
| 1 | 2 |
| 1 | 3 |
| 1 | 5 |
| 2 | 1 |
| 2 | 3 |
| 2 | 3 |
| 2 | 5 |
| 3 | 1 |
| 3 | 2 |
+--------+--------+
TABLE是ORDER BY Id_no1,Id_no2
我希望Id_no1和Id_no2像这样配对:
+--------+--------+
| Id_no1 | Id_no2 |
+--------+--------+
| 1 | 2 |
| 1 | 2 |
| 2 | 1 |
| | |
| 1 | 3 |
| 3 | 1 |
| | |
| 1 | 5 |
| | |
| 2 | 3 |
| 2 | 3 |
| 3 | 2 |
| | |
| 2 | 5 |
+--------+--------+
Id_no1和Id_no2是商店,发件人和收件人。我想在所有商店之间进行集体交流。
答案 0 :(得分:3)
可能会有所帮助:
select * from mytab
order by case when id_no1 < id_no2 then id_no1 else id_no2 end,
case when id_no2 > id_no1 then id_no2 else id_no1 end;
=以分钟为单位(col1,col2),max(col1,col2)
答案 1 :(得分:0)
您的要求显然按照相关方的顺序对您的数据进行排序。要做到这一点,你试图先由最低的参与方(升序)排序,然后由最高的参与方(也是升序)排序。
为了完成这项工作,我写了以下内容:这会按照您显示的顺序给出一个输出,并且可以正常工作......假设我的猜测与您的问题有很大关联。
/* Sample Data */
WITH Table1 AS
(
SELECT ID_No1, ID_No2
FROM
( VALUES
(1,2),
(1,2),
(1,3),
(1,5),
(2,1),
(2,3),
(2,3),
(2,5),
(3,1),
(3,2)
) AS VALUE(ID_No1, ID_No2)
)
/* Query */
SELECT ID_No1, ID_No2
FROM
(
SELECT
*,
CASE WHEN ID_No1 > ID_No2 THEN ID_No1 ELSE ID_No2 END AS MaxParty,
CASE WHEN ID_No1 < ID_No2 THEN ID_No1 ELSE ID_No2 END AS MinParty
FROM Table1
) arr
ORDER BY MinParty, MaxParty, ID_No1