【问题标题】:Add columns dynamically based on a condition in SQL根据 SQL 中的条件动态添加列
【发布时间】:2015-10-26 23:23:03
【问题描述】:

我正在使用 SSMS 2012。考虑一个包含 A、B、C 列的表 A。我想根据现有列之一中的条件向该表动态添加一个新列 D。如何实现?

查询如下所示, 从 #temptbl 中选择 col1、col2

对此#temptbl,我想添加一列col3,col3中的值基于col2上的条件。

【问题讨论】:

  • 你有没有尝试过存储过程。如果每个表的列数相同,则可以这样做
  • 您的意思是只向符合条件的记录添加一列吗?在这种情况下,这是不可能的。您必须为整个表添加列。最好还是添加列并根据条件设置列的值(可能是计算字段)
  • @Tom:是的,我就是这个意思。添加一列并根据条件在该列中返回值。如何做到这一点?
  • 更改表格并添加列。然后使用 case 表达式执行更新语句。除非您向我们提供有关您的表格的一些详细信息以及任何人都可以提供的最佳逻辑。
  • @SeanLange 我用示例查询修改了我的问题。你现在能帮我解决这个问题吗?

标签: sql sql-server sql-server-2008 ssms


【解决方案1】:

添加列需要ALTER表格

假设你想为COL3添加一个整数

ALTER TABLE #temptbl
ADD col3 INTEGER

要根据 col2 上的条件更新 col3 中的值,您需要执行 UPDATE 并使用 CASE 语句来检查条件:

假设你想在COL3 中设置值 3,如果 COL2 等于 2

UPDATE #temptbl
SET col3 = CASE WHEN col2 = 2 THEN 3 ELSE null END

【讨论】:

    【解决方案2】:

    在您编辑之后,您想要做什么仍然非常模糊,但也许这已经接近了???不知道条件或输出应该是什么,但是当条件不满足时,this 的输出将为 NULL。

    select col1
        , col2 
        , case when SomeCondition then SomeValue end as Col3
    from #temptbl 
    

    【讨论】:

      【解决方案3】:

      就像汤姆提到的那样,您只能为整个表设置一列,而不是有条件的。您可以将其设为计算列,或者在查询表时,如果无法添加列,则使用 CASE 语句。

      【讨论】:

      • 我正在尝试向临时表中添加一列。这就是问题所在。我不确定如何将列添加到临时表并对该列进行条件查询
      • 查询如下,select col1, col2 from #temptbl 到这个#temptbl,我想添加一列col3,col3中的值是基于col2上的一个条件。跨度>
      • 就像汤姆说的,“反正还是加列,根据条件给列设置值就好了”
      猜你喜欢
      • 2016-02-03
      • 1970-01-01
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多