【问题标题】:Concatenate column names in sql select statement if certain condition is met如果满足特定条件,则在 sql select 语句中连接列名
【发布时间】:2021-07-04 13:16:56
【问题描述】:

我有一个 SQL SELECT 语句拉 4 列:

SELECT cmm_residence, cmm_packing, cmm_furniture, cmm_overage

这些列是简单的否/是值 (0,1)。我需要一个额外的列 Description 来连接该行的任何“是”值。

例如:如果查询对cmm_residencecmm_furniture 返回“是”,则Description 列应为cmm_residence,cmm_furniture

【问题讨论】:

  • 到目前为止您尝试过什么?您查询的问题/问题是什么?
  • 您使用的是哪个 dbms?
  • 我了解了 Concat 函数的工作原理,但我只是想不通让函数来使用 Case。下面的另一位用户帮助我弄清楚了。仍然在学习 SQL 时摸索着。感谢您的回复,我很感激。

标签: sql concatenation


【解决方案1】:

架构和插入语句:

 create table  mytable (cmm_residence varchar(5), cmm_packing varchar(5), cmm_furniture varchar(5), cmm_overage varchar(5));
 insert into mytable values('yes','no','no','yes');
 insert into mytable values('no','no','no','yes');
 insert into mytable values('yes','yes','no','yes');

查询:

 select cmm_residence, cmm_packing, cmm_furniture, cmm_overage,
 concat(case when cmm_residence='yes' then ' cmm_residence ,'end,
 case when cmm_packing='yes' then ' cmm_packing ,'end,
 case when cmm_furniture='yes' then ' cmm_furniture ,'end,
 case when cmm_overage='yes' then ' cmm_overage 'end)Description
 from mytable

输出:

cmm_residence cmm_packing cmm_furniture cmm_overage Description
yes no no yes cmm_residence , cmm_overage
no no no yes cmm_overage
yes yes no yes cmm_residence , cmm_packing , cmm_overage

dbhere

【讨论】:

    【解决方案2】:

    您可以在 SELECT 语句中使用 CASE,添加您需要的任何逻辑,如下所示:

    SELECT cmm_residence, cmm_packing, cmm_furniture, cmm_overage, 
    CASE
        WHEN cmm_residence = 1 THEN 'cmm_residence'
        WHEN  cmm_packing = 1  THEN 'cmm_packing'
        ELSE ''
    END As 'Description' 
    FROM Table
    

    只需根据需要添加尽可能多的带有逻辑的案例,考虑到这不是很高效的查询。

    【讨论】:

      猜你喜欢
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2013-07-06
      相关资源
      最近更新 更多