如何在SQL Server中通过写客户订单

时间:2018-06-26 20:45:51

标签: sql sql-server

我有一些示例数据。

这里是按逻辑顺序

  1. createDate的第一笔订单
  2. col1进行的第二次排序包含单词 Tom 需要大写和小写
  3. col2的三阶命令不区分大小写

样本数据:

|   col1 |        col2 |           createDate |
+--------+-------------+----------------------+
|  S Amy |   Apple pie | 2018-06-19T00:00:00Z |
|  U Tom |   Apple pie | 2018-06-19T00:00:00Z |
|  kevin |  banana pie | 2018-06-18T00:00:00Z |
|  U tOm |   Apple pie | 2018-06-19T00:00:00Z |
|  k tom | Apple juice | 2018-06-18T00:00:00Z |
| Stanly |   Apple pie | 2018-06-18T00:00:00Z |
|    Tom |  banana pie | 2018-06-19T00:00:00Z |

示例数据sqlfiddle:http://sqlfiddle.com/#!18/6c729/1

我已经尝试过此查询。我不知道要达到预期的结果。

SELECT *
FROM myTable
ORDER BY createDate DESC

当前结果:

|   col1 |        col2 |           createDate |
+--------+-------------+----------------------+
|  S Amy |   Apple pie | 2018-06-19T00:00:00Z |
|  U Tom |   Apple pie | 2018-06-19T00:00:00Z |
|  U tOm |   Apple pie | 2018-06-19T00:00:00Z |
|    Tom |  banana pie | 2018-06-19T00:00:00Z |
|  k tom | Apple juice | 2018-06-18T00:00:00Z |
| Stanly |   Apple pie | 2018-06-18T00:00:00Z |
|  kevin |  banana pie | 2018-06-18T00:00:00Z |

我不知道该怎么做第二和第三条件。

我的预期结果:

|   col1 |        col2 |           createDate |
+--------+-------------+----------------------+
|  U Tom |   Apple pie | 2018-06-19T00:00:00Z |
|    Tom |  banana pie | 2018-06-19T00:00:00Z |
|  S Amy |   Apple pie | 2018-06-19T00:00:00Z |
|  U tOm |   Apple pie | 2018-06-19T00:00:00Z |
|  k tom | Apple juice | 2018-06-18T00:00:00Z |
| Stanly |   Apple pie | 2018-06-18T00:00:00Z |
|  kevin |  banana pie | 2018-06-18T00:00:00Z |

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

您可以尝试在CASE WHEN上使用ORDER BY

看起来像这样。

SELECT *
FROM myTable
ORDER BY
 createDate DESC,
 CASE 
    WHEN col1 collate Chinese_PRC_CS_AS like '%Tom%' THEN 2
    WHEN col2 like '%apple%' THEN 1
    ELSE 0
 END DESC

注意:

  • collate Chinese_PRC_CS_AS区分大小写

sqlfiddle:http://sqlfiddle.com/#!18/66fd1/2

结果:

|   col1 |        col2 |           createDate |
|--------|-------------|----------------------|
|  U Tom |   Apple pie | 2018-06-19T00:00:00Z |
|    Tom |  banana pie | 2018-06-19T00:00:00Z |
|  S Amy |   Apple pie | 2018-06-19T00:00:00Z |
|  U tOm |   Apple pie | 2018-06-19T00:00:00Z |
|  k tom | Apple juice | 2018-06-18T00:00:00Z |
| Stanly |   Apple pie | 2018-06-18T00:00:00Z |
|  kevin |  banana pie | 2018-06-18T00:00:00Z |

答案 1 :(得分:1)

根据您的问题,一个简单的答案应该是:

SELECT *
FROM myTable
ORDER BY createDate DESC, col1 , upper(col2) 

其中upper(col2)允许排序不区分大小写

...但是仅当您的数据以不区分大小写的排序规则存储时才是错误的,例如sql_latin1_general_cp1_ci_as

一个更通用的答案是:

SELECT *
FROM myTable
ORDER BY createDate DESC
, col1 COLLATE Latin1_General_BIN 
, col2 COLLATE  sql_latin1_general_cp1_ci_as

=> col1 COLLATE Latin1_General_BIN确保区分大小写的“ col1”

=> col2 COLLATE sql_latin1_general_cp1_ci_as确保不区分大小写的“ col2”