【问题标题】:Combine two columns data into one column leaving null values将两列数据合并为一列,留下空值
【发布时间】:2018-04-16 02:50:26
【问题描述】:

我的表格有如下四列

表格 - 订阅具有这样的数据

  part_id     subscription   policylicense    enterpriselic
   part1        sub1          null                null
   part2        sub1          pl1                 null
   part3        sub1          null                enterpr1

我想得到下面这样的数据

  part_id     subscription   license    
   part2        sub1          pl1                 
   part3        sub1          enterpr1                

如何将合并的许可证数据放入一列,在同一个表中留下空值。我在这里使用 sql server

任何人都可以在这方面提供帮助,非常感谢我.. 非常感谢提前..

【问题讨论】:

  • @GordonLinoff policylicenseenterpriselic 都是 NULL 所以我猜他不需要输出中的那一行

标签: sql sql-server tsql stored-procedures sql-server-2014


【解决方案1】:

这是另一个使用COALESCE()的解决方案

SELECT
    part_id
    ,subscription
    ,COALESCE(policylicense, enterpriselic) AS license
FROM subscription
WHERE COALESCE(policylicense, enterpriselic) IS NOT NULL

【讨论】:

  • 我不确定 COALESCE 是仅适用于字符串还是整个列。
  • 两者都适用:)
  • 合并以获得更多重要性?
  • 并不是说如果policylicenseenterpriselic 都是not null 那么license 将具有COALESCE 中第一个的值 意思是policylicense
  • @TapakahUa 我通常使用COALESCE(),因为您可以提供要检查的值列表;也许如果第三列可用,您可以轻松地在参数列表中传递该列。
【解决方案2】:

试试这个:

SELECT part_id, subscription,
ISNULL(policylicense, enterpriselic) AS license
FROM yourtable
WHERE policylicense IS NOT NULL OR enterpriselicense IS NOT NULL

【讨论】:

  • 感谢您的支持:)
  • 祝你有美好的一天;)
【解决方案3】:

试试这个。 Ternary operators:

SELECT
part_id,
subscription,
IIF(policylicense IS NULL,
    IIF(enterpriselic IS NULL,'',enterpriselic),
        policylicense) as license
from subscription 
where   enterpriselic IS NOT NULL OR  
        policylicense IS NOT NULL

【讨论】:

    【解决方案4】:

    试试这个 COALESC()

    SELECT part_id
        ,subscription
        ,COALESCE(policylicense, enterpriselic) AS license
    FROM subscription
    WHERE COALESCE(policylicense, enterpriselic) IS NOT NULL
    

    【讨论】:

      【解决方案5】:
      Select 
          part_id,
          subscription,
          CONCAT(policylicense,enterpriselic) as license
      from subscription where enterpriselic IS NOT NULL OR  policylicense IS NOT NULL
      

      【讨论】:

      • Omg... 来自 sql 2012 的 CONCAT()
      • 情况只会变得更糟 :) CONCAT(policylicense ,enterpriselic)
      • @TapakahUa:谢谢 :)。我不确定在 CONCAT() 中传递的 NULL 值。刚刚验证过了。
      【解决方案6】:
      SELECT 
      part_id ,
      subscription,   
      license  = ISNULL(policylicense,enterpriselic)
      FROM <table>
      WHERE 
      policylicense IS NOT NULL OR enterpriselic IS NOT NULL
      

      【讨论】:

      • 虽然答案是正确的,但也请用文字描述您是如何得出这个解决方案的。
      【解决方案7】:

      这是一种使用 IF 的方法,因此您可以测试该列是否为空,如果为空,您只需查看最终结果

      SELECT part_id, subscription, IF(policylicense IS NOT NULL, policylicense, IF(enterpriselic IS NOT NULL, enterpriselic, enterpriselic)) as license
      FROM tableA
      HAVING license IS NOT NULL;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多