Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL查询的CONCAT函数中使用IF条件_Sql_Sql Server - Fatal编程技术网

在SQL查询的CONCAT函数中使用IF条件

在SQL查询的CONCAT函数中使用IF条件,sql,sql-server,Sql,Sql Server,我试图在SQL查询中实现连接。我需要使用逗号作为值之间的分隔符 select concat(technology,',',secondary_technology,',',tertiary_technology) as Technology from deals 这完全可以。但是,如果在第二和第三技术列中没有值,结果看起来像 Blue Prism,, 所以我需要设置一个条件,如果二级和三级技术为空,则需要省略逗号。 我正在使用以下查询: select concat(technology,if

我试图在SQL查询中实现连接。我需要使用逗号作为值之间的分隔符

select concat(technology,',',secondary_technology,',',tertiary_technology) as Technology from deals
这完全可以。但是,如果在第二和第三技术列中没有值,结果看起来像

Blue Prism,,
所以我需要设置一个条件,如果二级和三级技术为空,则需要省略逗号。 我正在使用以下查询:

select concat(technology,if(secondary_technology is null,'',','),secondary_technology,if(tertiary_technology is null,'',','),tertiary_technology) as Technology from deals
但这样说是错误的 关键字“if”附近的语法不正确。 “,”附近的语法不正确

请帮我做这个! 我正在使用MS SQL Server 2014 提前感谢您。

使用凝聚:

编辑:使用素材:

使用合并:

编辑:使用素材:


请使用以下代码作为备选代码:

选择ConCatterTechnology、ISNULLsecondary\u technology、ISNULLsecondary\u technology作为技术
来自交易

请使用以下代码作为替代:

选择ConCatterTechnology、ISNULLsecondary\u technology、ISNULLsecondary\u technology作为技术
来自交易

Concat在追加时将忽略空值。试试这个

select CONCAT(technology, ',' +secondary_technology, ',' +tertiary_technology)
from deals
如果技术列可以为空

select case when technology is null then stuff(Result, 1, 1, '') else Result end
from (
select technology, CONCAT(technology, ',' +secondary_technology, ',' +tertiary_technology) as Result
from deals
) tab
您可能还希望使用NULLIF检查空字符串列

select case 
    when coalesce(technology,'') = '' then stuff(Result, 1, 1, '') 
    else Result 
  end Result
from 
(
  select technology
  , CONCAT(technology, ',' + nullif(secondary_technology,''), ',' + nullif(tertiary_technology,'')) as Result
  from deals
) tab

追加时,Concat将忽略空值。试试这个

select CONCAT(technology, ',' +secondary_technology, ',' +tertiary_technology)
from deals
如果技术列可以为空

select case when technology is null then stuff(Result, 1, 1, '') else Result end
from (
select technology, CONCAT(technology, ',' +secondary_technology, ',' +tertiary_technology) as Result
from deals
) tab
您可能还希望使用NULLIF检查空字符串列

select case 
    when coalesce(technology,'') = '' then stuff(Result, 1, 1, '') 
    else Result 
  end Result
from 
(
  select technology
  , CONCAT(technology, ',' + nullif(secondary_technology,''), ',' + nullif(tertiary_technology,'')) as Result
  from deals
) tab
试试这个:

select concat(
  technology, 
  CASE WHEN secondary_technology IS NOT NULL
      THEN concat(', ', secondary_technology)
      ELSE ''
  END,
  CASE WHEN tertiary_technology IS NOT NULL
      THEN concat(', ', tertiary_technology)
      ELSE ''
  END,
  ) as Technology    
from deals;
请参阅与此问题相关的答案:

尝试以下方法:

select concat(
  technology, 
  CASE WHEN secondary_technology IS NOT NULL
      THEN concat(', ', secondary_technology)
      ELSE ''
  END,
  CASE WHEN tertiary_technology IS NOT NULL
      THEN concat(', ', tertiary_technology)
      ELSE ''
  END,
  ) as Technology    
from deals;

请参阅与此问题相关的答案:

最简单的解决方案。感谢您提供的解决方案。。但如果只有secondary technology列有值,而其他两个列为空,那么secondary technology列值前后会有两个逗号,对吗?如何解决这个问题?@SaswatRath如果你说的“无值”是指空白,那就是一个问题;如果为null,则自“,”+null=null以来已对其进行处理。要将空格视为空,可以使用nullif:CONCATtechnology、“+nullifsecondary_technology、”、“+nullifteritary_technology、@JohnLBevan您的解决方案解决了我的问题。。这正是我要找的。。非常感谢你的帮助!!:最简单的解决方案。谢谢你的解决方案。。但如果只有secondary technology列有值,而其他两个列为空,那么secondary technology列值前后会有两个逗号,对吗?如何解决这个问题?@SaswatRath如果你说的“无值”是指空白,那就是一个问题;如果为null,则自“,”+null=null以来已对其进行处理。要将空格视为空,可以使用nullif:CONCATtechnology、“+nullifsecondary_technology、”、“+nullifteritary_technology、@JohnLBevan您的解决方案解决了我的问题。。这正是我要找的。。非常感谢你的帮助!!:谢谢你的帮助。。这在只有技术列有值而在第二列和第三列中没有值的情况下工作良好。但是,如果“技术”列和“辅助技术”列都有值,则在“辅助技术”值之后的值后面会出现一个额外的逗号。此外,如果“技术”列中没有值,但在其他两列中有值,则“技术”列的开头会出现一个逗号。请也解决这个问题谢谢你的帮助。。这在只有技术列有值而在第二列和第三列中没有值的情况下工作良好。但是,如果“技术”列和“辅助技术”列都有值,则在“辅助技术”值之后的值后面会出现一个额外的逗号。此外,如果“技术”列中没有值,但在其他两列中有值,则“技术”列的开头会出现一个逗号。请也解决这个问题。提示:案例。。。结束提示:案例。。。终止