Lil*_*nos 3 sql-server-2008 sql-server order-by
我想订购这张桌子,但我找不到让它工作的方法。你能帮助我吗?
我有这张桌子:
我需要这个:
我有一个列出文档的表,第一个字段是文档的 id,第二个字段代表父亲,所以我必须显示一个列表,您可以有序地看到 242 是第一个文档,252 和 335是从 242 生成的。
查询:
select * from table_name order by col1 ASC, Col2 ASC
Run Code Online (Sandbox Code Playgroud)
......对我不起作用。我做这个查询:
SELECT
FR1.[report_id],
FR1.[report_parent]
FROM [FARA_reports] FR1
WHERE
FR1.[report_is_delete] <> 1
AND FR1.[report_is_tmp] <> 1
ORDER BY
FR1.[report_id] asc,
FR1.[report_parent] desc
Run Code Online (Sandbox Code Playgroud)
这是我的第一张图片。
您的数据:
CREATE TABLE dbo.WEIRD_ORDERING
(
ID1 INT NULL,
ID2 INT NULL
);
INSERT INTO dbo.WEIRD_ORDERING VALUES
(242, NULL),
(243, NULL),
(244, NULL),
(252, 242),
(254, NULL),
(255, NULL),
(256, NULL),
(292, NULL),
(308, NULL),
(311, NULL),
(313, 311),
(314, 311),
(323, NULL),
(324, 311),
(335, 242),
(340, NULL),
(341, NULL),
(358, NULL),
(372, NULL),
(373, NULL),
(377, NULL),
(378, 358),
(379, 358),
(380, 358),
(381, 358);
Run Code Online (Sandbox Code Playgroud)
这将为您提供所需顺序的结果:
SELECT ID1, ID2
FROM
(
SELECT ID1, ID2, ID1 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 <= ID2 OR ID2 IS NULL
UNION ALL
SELECT ID1, ID2, ID2 AS ORDERING_COLUMN
FROM dbo.WEIRD_ORDERING
WHERE ID1 > ID2 OR ID1 IS NULL
) q
ORDER BY ORDERING_COLUMN, ID1;
Run Code Online (Sandbox Code Playgroud)
另外一个选项:
select a, b
from t
order by
case when a < b or b is null then a else b end,
case when a < b or b is null then b else a end ;
Run Code Online (Sandbox Code Playgroud)
在dbfiddle.uk 中测试。