Sal*_*n A 1 sql t-sql sql-server sorting
我有一个查询,其中每行包含3列:
我想根据NOT NULL(当前)值的数量对行进行排序,具体如下:
这是示例数据(插入语句按照我期望的顺序排序):
/*
CREATE TABLE #TEMP (
Type VARCHAR(100),
Name VARCHAR(100),
Distance VARCHAR(100),
Proximity VARCHAR(100)
);
*/
INSERT INTO #TEMP VALUES ('AIRPORT', 'KBLI', '21mi', 'City')
INSERT INTO #TEMP VALUES ('AIRPORT', 'KBLI', '21mi', NULL )
INSERT INTO #TEMP VALUES ('AIRPORT', 'KBLI', NULL , 'City')
INSERT INTO #TEMP VALUES ('AIRPORT', NULL , '21mi', 'City')
INSERT INTO #TEMP VALUES ('AIRPORT', 'KBLI', NULL , NULL )
INSERT INTO #TEMP VALUES ('AIRPORT', NULL , '21mi', NULL )
INSERT INTO #TEMP VALUES ('AIRPORT', NULL , NULL , 'City')
Run Code Online (Sandbox Code Playgroud)
我在COALESCE声明方面取得了一些成功,但我正在寻找有效且易读的东西.稍后我将改为四列.
将当前值分配为数字(名称= 4,距离= 3,接近度= 2),然后对它们求和并按其排序:
select ...
from ...
order by
case when name is null then 0 else 4 end +
case when distance is null then 0 else 3 end +
case when proximity is null then 0 else 2 end desc
Run Code Online (Sandbox Code Playgroud)
这里的诀窍是3 + 2> 4,所以距离和接近度胜过一个名字.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |