有个表,一个字段是ID。其他字段是附注说明。比如说明1,说明2,说明3
类似如下结果
id,remark1,remrk2,remark3等。
然后里面的数据,比如ID都是001,但是后面的不一样。有的有值,有的没值,有的可能3个都有值。类似如下
id remark1 remrk2 remark3
001 附注红色
001 附注蓝色 附注绿色
001 附注蓝色 附注绿色
001 附注蓝色 附注绿色 附注红色
几个remark的内容是任意的。
我现在想按附注的多少来选择排序。比如第四条,他有3个附注,那么他就排第一,而第一条只有一个附注,就排最后。
同样多附注的,不管附注在那个字段,都只取一条。比如第二条和第三条,就只取一条出来。排在中间。
------解决方案--------------------
order by case when then..end
------解决方案--------------------
----------------------------------------------------------------
-- Author :DBA_HuangZJ(發糞塗牆)
-- Date :2014-07-01 11:31:02
-- Version:
-- Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
-- May 14 2014 18:34:29
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go
create table [huang]([id] varchar(3),[remark1] varchar(8),[remrk2] varchar(8),[remark3] varchar(8))
insert [huang]
select '001','附注红色',null,null union all
select '001','附注蓝色','附注绿色',null union all
select '001','附注蓝色','附注绿色',null union all
select '001','附注蓝色','附注绿色','附注红色'
--------------开始查询--------------------------
select *
from [huang]
ORDER BY DATALENGTH(ISNULL([remark1],'')+ISNULL([remrk2],'')+ISNULL([remark3],'')) DESC
----------------结果----------------------------
/*
id remark1 remrk2 remark3
---- -------- -------- --------
001 附注蓝色 附注绿色 附注红色
001 附注蓝色 附注绿色 NULL
001 附注蓝色 附注绿色 NULL
001 附注红色 NULL NULL
*/