sql 根据具有现有值的其他列创建列

Posted

技术标签:

【中文标题】sql 根据具有现有值的其他列创建列【英文标题】:sql create column based on other columns with existing values 【发布时间】:2018-06-29 07:37:51 【问题描述】:

我需要一些 t-sql 帮助来创建下表中的“Grp”列。基本上我需要创建一个列来说明值何时存在,如果它为空,则将其从“Grp”列中排除。该表是我需要的最终结果的示例(现在只存在 Col1、Col2、Col3)

【问题讨论】:

【参考方案1】:

使用一些带有STUFFCASE 表达式来删除前导-

SELECT
    STUFF(
        (
            CASE WHEN T.Col1 IS NOT NULL THEN '-Col1' ELSE '' END +
            CASE WHEN T.Col2 IS NOT NULL THEN '-Col2' ELSE '' END +
            CASE WHEN T.Col3 IS NOT NULL THEN '-Col3' ELSE '' END 
        ),
        1, 1, ''),
    T.Col1,
    T.Col2,
    T.Col3
FROM
    YourTable AS T

【讨论】:

案例表达式.【参考方案2】:

你可以使用case when语句:

select 
  left(t.Grp,len(Grp)-1) as Grp,
  t.col1,t.col2,t.col3
from (    
  select col1, col2, col3,
    case when col1 is null then '' else 'col1-' +
    case when col2 is null then '' else 'col2-' +
    case when col3 is null then '' else 'col3-'
    as Grp
  from your_table
  ) t

【讨论】:

修复包含多个 else 的 case 语句 案例表达式.

以上是关于sql 根据具有现有值的其他列创建列的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 2017 上创建具有 800+ 百万行的现有分区表的列存储索引

向现有列添加标识

Oracle PL/SQL 过程/函数来创建包含列的视图

SQL查询从具有相同列“名称”的其他两个表中获取具有不同值的单列“名称”[关闭]

scala 根据具有相同值的 2 列过滤掉连接 df 中的行 - 最佳方式

Laravel 迁移:添加具有现有列默认值的列