本文介绍了使用不同的 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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 07:43
查看更多