本文介绍了使用不同的 order by 和 union的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想写一个类似的查询
从 A 中选择前 10 个 *按价格订购联盟从 A 中选择前 3 个 *按价格订购
或者诸如此类的
从 A 中选择前 10 个 *其中名称像%smt%"按价格订购联盟从 A 中选择前 3 个 *其中名称不像%smt%"按价格订购
你能帮我吗?
解决方案
这应该有效:
SELECT *FROM (SELECT TOP 10 A.*, 0 AS Ordinal从 A按 [价格] 订购)作为 A1联合所有选择 *FROM (SELECT TOP 3 A.*, 1 AS Ordinal从 A按 [姓名] 订购)作为 A2按序数排序
来自 MSDN:>
在使用 UNION、EXCEPT 或 INTERSECT 运算符的查询中,ORDER BY只允许出现在语句的末尾.此限制适用仅当您在顶层指定 UNION、EXCEPT 和 INTERSECT 时查询而不是在子查询中.
已编辑:要强制您需要将 ORDER BY
应用于外部查询的顺序.我在两个查询中都添加了一个常量值列.
I want to write a query like
select top 10 * from A
order by price
union
select top 3 * from A
order by price
or sth like that
select top 10 * from A
where name like '%smt%'
order by price
union
select top 3 * from A
where name not like '%smt%'
order by price
Can you please help me?
解决方案
This should work:
SELECT *
FROM (SELECT TOP 10 A.*, 0 AS Ordinal
FROM A
ORDER BY [Price]) AS A1
UNION ALL
SELECT *
FROM (SELECT TOP 3 A.*, 1 AS Ordinal
FROM A
ORDER BY [Name]) AS A2
ORDER BY Ordinal
From MSDN:
Edited: to force the order you need to apply an ORDER BY
to the outer query. I've added a constant value column to both queries.
这篇关于使用不同的 order by 和 union的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!