sql - 使用 UNION 的自定义结果顺序 - SQL

标签 sql sql-server database tsql

我有一个相当简单的任务,我需要首先选择具有值为 1 的特定字段的行,然后是值为 2 的行,最后是值为 0 的所有其他行。

我使用联接来获取哪些项目是哪个类别的成员。我认为执行 3 次选择并使用联合会以正确的顺序组合结果,但我错了 :)

我的SQL如下:

SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany
ON tblcompany.idcompany = tblcompanycategory.idcompany
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 1 
UNION 
SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany
ON tblcompany.idcompany = tblcompanycategory.idcompany
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 2
UNION 
SELECT * FROM tblcompanycategory 
INNER JOIN tblcompany
ON tblcompany.idcompany = tblcompanycategory.idcompany
WHERE tblcompanycategory.idcategory = @category AND tblcompany.intpremium = 0

我的结果不是按 1、2、0 的顺序输出的。我在这里做错了什么??

* 解决方案 * 感谢您的帮助。下面是我使用的最终 SQL。

SELECT * FROM tblcompanycategory 
    INNER JOIN tblcompany
    ON tblcompany.idcompany = tblcompanycategory.idcompany
    WHERE tblcompanycategory.idcategory = @category 
    ORDER BY CASE tblcompany.intpremium WHEN 1 THEN 0 WHEN 2 THEN 1 WHEN 0 THEN 2 END

最佳答案

与所有优秀的集合运算符一样,UNION 语句在排序数据时是不可知的。

然而,您可以做的是运行一个带有精心设计的 ORDER BY 语句的 select 语句,例如:

... ORDER BY CASE tblCompany.IntPremium WHEN 1 THEN 0 WHEN 2 THEN 1 WHEN 0 THEN 2 END

关于sql - 使用 UNION 的自定义结果顺序 - SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4969941/

相关文章:

mysql - 一组数据结构的变化类似于SVN?

sql-server - TSQL:创建访问多个数据库的 View

ElasticSearch 或 Couchbase 或其他

java - 获取所有数据库并转换为字符串数组

sql - 如何选择记录数,然后按外键对它们进行分组?

mysql - where 子句中的别名

php - 根据 REGEX 将 mysql 列值拆分为 2 列

c# - 在 SQL Server 2008 中的多个表中插入数据

sql - 嵌套查询或连接

javascript - TS - 循环遍历对象数组,如果找不到则添加到新数组