当前位置: 代码迷 >> Sql Server >> 求分析一个奇怪的需求,某个字段有值就体现,没值就不体现,如何弄
  详细解决方案

求分析一个奇怪的需求,某个字段有值就体现,没值就不体现,如何弄

热度:78   发布时间:2016-04-24 09:32:51.0
求分析一个奇怪的需求,某个字段有值就体现,没值就不体现,怎么弄?
求分析一个奇怪的需求,某个字段有值就体现,没值就不体现,怎么弄?

大概是这样:
表t,里面有字段a,b,c,d,e,f
如果字段a有值,那么基本上bcdef都为null,此时select,要体现自定义内容如'群组1',而bcdef都不体现
如果字段b有值,那么基本上acdef都为null,此时select,要体现自定义内容如'群组2',而acdef都不体现

abcdef的值都是类似1;2;3或者1;3或者3;6这样的,日后还会进一步统计

统计结果就是要select * from t 的时候,abcdef当作一个字段显示了,显示值就是群组1 群组2这样

我知道听变态的,我觉得我改下sql结构会好,不过现在能实现吗

我用case 似乎判断null not null后,结果不对
------解决思路----------------------
没明白
;WITH TB(a,b,c,d,e,f)AS(
SELECT '1,2',CAST(NULL AS VARCHAR(20)),CAST(NULL AS VARCHAR(20)),CAST(NULL AS VARCHAR(20)),CAST(NULL AS VARCHAR(20)),CAST(NULL AS VARCHAR(20))
UNION ALL SELECT NULL,'2,3',NULL,NULL,NULL,NULL
UNION ALL SELECT NULL,NULL,'2,3',NULL,NULL,NULL
UNION ALL SELECT NULL,NULL,NULL,'2,3',NULL,NULL
UNION ALL SELECT NULL,NULL,NULL,NULL,'2,3',NULL
UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,'2,3'
)
SELECT CASE
        WHEN a IS NOT NULL THEN '群组1'
        WHEN b IS NOT NULL THEN '群组2'
        WHEN c IS NOT NULL THEN '群组3'
        WHEN d IS NOT NULL THEN '群组4'
        WHEN e IS NOT NULL THEN '群组5'
        WHEN f IS NOT NULL THEN '群组6'
    END
FROM TB
你看下,是这样吗
------解决思路----------------------
引用:

-- 难道,LZ 是这个意思 ?
SELECT CASE  WHEN a IS NOT NULL THEN '群组1' ELSE null END , 
       CASE  WHEN b IS NOT NULL THEN '群组2' ELSE null END ,
       CASE  WHEN c IS NOT NULL THEN '群组3' ELSE null END ,
       CASE  WHEN d IS NOT NULL THEN '群组4' ELSE null END ,
       CASE  WHEN e IS NOT NULL THEN '群组5' ELSE null END ,
       CASE  WHEN f IS NOT NULL THEN '群组6' ELSE null END 
    END
FROM TB



-- 多了个 END , 换这个。
SELECT CASE  WHEN a IS NOT NULL THEN '群组1' ELSE null END , 
       CASE  WHEN b IS NOT NULL THEN '群组2' ELSE null END ,
       CASE  WHEN c IS NOT NULL THEN '群组3' ELSE null END ,
       CASE  WHEN d IS NOT NULL THEN '群组4' ELSE null END ,
       CASE  WHEN e IS NOT NULL THEN '群组5' ELSE null END ,
       CASE  WHEN f IS NOT NULL THEN '群组6' ELSE null END 
FROM TB

------解决思路----------------------
只有一个非空,你可以检测第一个不为空的列,可以这样 

DECLARE @Var1 VARCHAR(50)=NULL,
 @var2 VARCHAR(40)=NULL,
  @var3 VARCHAR(40)='32342'

SELECT COALESCE(@Var1,@var2,@var3)

/*
(无列名)
32342
*/
  相关解决方案