我有一个返回以下数据的查询
身份证 | 第 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 |
任何有关如何进行的提示将不胜感激。
您的查询并没有真正对任何内容进行排序。它所做的就是将特定行移动到列表的末尾,所以这样做:
SELECT * FROM myTable where col1!='val_1' or col2!='val_1'
UNION
SELECT * FROM myTable where col1='val_1' and col2='val_1';