T-SQL 两个具有不同排序依据的查询之间的 UNION,所有排序依据

T-SQL UNION between two queries with different order by, all orded by

如标题我有这个问题:

我有这两个问题

SELECT state, TIMESTAMP
FROM myTable
WHERE state != 9
ORDER BY TIMESTAMP ASC

SELECT TOP (3) state, TIMESTAMP
FROM myTable
WHERE state = 9
ORDER BY TIMESTAMP DESC

是否可以再次 ORDER BY (ORDER BY TIMESTAMP ASC) 这些查询的 UNION

谢谢

编辑:更具体

我有一个带有 [state][timestamp] 字段的 table。 [State] 值可以是 3、8 或 9。 我需要的是 select:
[state] = 9 最后 3 条记录
[state] != 9全部

全部ORDER BY [timestamp] ASC

你可以这样做:

SELECT [state], [TIMESTAMP]
FROM
(
    SELECT [state], [TIMESTAMP]
    FROM   myTable
    WHERE  [state] != 9   

    UNION 

    SELECT TOP(3) [state], [TIMESTAMP]
    FROM          myTable
    WHERE         [state] = 9
    ORDER BY [TIMESTAMP] DESC
) u
ORDER BY [TIMESTAMP] ASC

第一个查询的 order by 在联合中是多余的,但第二个查询需要它用于 top(3),否则你会得到 3 个任意行。

请这样尝试

SELECT  *
FROM    (
    SELECT state, TIMESTAMP
    FROM myTable
    WHERE state != 9
    UNION
    SELECT TOP (3) state, TIMESTAMP
    FROM myTable
    WHERE state = 9
    ORDER BY (CASE WHEN state = 9 THEN TIMESTAMP END ) DESC
        ,(CASE WHEN state != 9 THEN TIMESTAMP END ) ASC
)   D