SELECT TOP 20 seq_no
FROM (SELECT TOP 909 *
FROM (SELECT *, 1 AS type
FROM guanli.dbo.tm_object_data
WHERE (order_no IS NULL AND order_deno IS NULL) AND
section_no = 8110
ORDER BY seq_no DESC
UNION
SELECT *, 0 AS type
FROM guanli.dbo.tm_object_data
WHERE (order_no IS NOT NULL OR
order_deno IS NOT NULL) AND
section_no = 8110
ORDER BY order_no DESC, order_deno DESC))
AS product
ORDER BY type ASC, order_no ASC, order_deno ASC, seq_no ASC
或者说有什么别的好方法实现这个功能么?
你的SQL是有错的;我只帮你改正一下,效率可能不高,TRY IT
SELECT TOP 20 seq_no FROM
(SELECT TOP 909 * FROM
(SELECT *, 1 AS type FROM guanli.dbo.tm_object_data
WHERE (order_no IS NULL AND order_deno IS NULL) AND section_no = 8110
UNION
SELECT *, 0 AS type FROM guanli.dbo.tm_object_data
WHERE (order_no IS NOT NULL OR order_deno IS NOT NULL) AND section_no= 8110
)t ORDER BY order_no DESC, order_deno DESC) AS product
ORDER BY type ASC, order_no ASC, order_deno ASC, seq_no ASC
想实现什么功能呢?
SELECT TOP 20 seq_no
FROM
ORDER BY type ASC, order_no ASC, order_deno ASC, seq_no ASC
--大概可以改写成这样吧,试试看。
--没必要在子查询中使用 ORDER BY 或者 嵌套的top n ,结果中没有和type有关的条件,为什么要计算type?
SELECT TOP 20 seq_no, case when order_no IS NULL AND order_deno IS NULL then 1
when order_no IS NOT NULL OR order_deno IS NOT NULL then 0
end as type
FROM tm_object_data
WHERE section_no = 8110
ORDER BY type ASC, order_no ASC, order_deno ASC, seq_no ASC