如何强制基于多列的记录排序

问题描述 投票:0回答:1

我有一个返回以下数据的查询

身份证 第 1 栏 第 2 栏
1 瓦尔 瓦尔
2 Val_1 瓦尔
3 Val_1 Val_1
4 瓦尔 Val_1
5 瓦尔 瓦尔

我的组织希望以非常具体的方式对这些数据进行排序。他们希望将 Col1 或 Col 2 中具有“Val_1”值的任何记录排序到底部,除非该记录在另一列中具有非 Val_1 值。 我按照此链接中的教程将记录强制基于一列放在底部,这产生了以下结果:

ORDER BY CASE WHEN Col1 = 'Val_1' THEN 1 ELSE 0 END ASC
身份证 第 1 栏 第 2 栏
1 瓦尔 瓦尔
5 瓦尔 瓦尔
4 瓦尔 Val_1
3 Val_1 Val_1
2 Val_1 瓦尔

但是,由于 ID 为 2 的记录具有 Col2 的 Val 而不是 Val_1,因此组织希望该记录不会到达底部。因此,期望的结果是:

身份证 第 1 栏 第 2 栏
1 瓦尔 瓦尔
5 瓦尔 瓦尔
4 瓦尔 Val_1
2 Val_1 瓦尔
3 Val_1 Val_1

任何有关如何进行的提示将不胜感激。

sql sql-server
1个回答
0
投票

您的查询并没有真正对任何内容进行排序。它所做的就是将特定行移动到列表的末尾,所以这样做:

SELECT * FROM myTable where col1!='val_1' or col2!='val_1'
UNION
SELECT * FROM myTable where col1='val_1' and col2='val_1';
© www.soinside.com 2019 - 2024. All rights reserved.