我有一个相当简单的任务,我需要首先选择具有值为 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/