【问题标题】:Is it possible to UPDATE a table based on what other columns are showing?是否可以根据其他列显示的内容更新表?
【发布时间】:2013-08-02 18:42:08
【问题描述】:

想要这样做的原因是,我需要以四种不同的方式按数据集分组,但仍需要将它们作为一个结果集返回。

例如。

我真的想不出一个实际的例子,但在我正在做的例子中它是必要的。想象一下,如果我返回的是水果、蔬菜、总统和运动,但我想将所有内容分组

水果同名 蔬菜的颜色 各党派总统和 他们所在城市的体育运动。 (好吧,我告诉过你我有一个不好的例子)

无论如何,我希望做的是 GROUP BY,我称之为“子类”。为了做到这一点,“子类”将查看“规则类”来确定它应该返回什么代码。这甚至可能吗?和这个类似的东西……

 UPDATE #FakeTable
 SET SubClass = CASE WHEN RuleClass = 'Fruit' THEN H.NAME
                     WHEN RuleClass = 'Vegetables' THEN H.COLOR
                     WHEN RuleClass = 'President' THEN H.PARTY
                     ELSE H.City
                END
        FROM #Holdings H
        WHERE #FakeTable.SubClass = NULL

因此,此列本质上会从不同临时表中的另一列中提取,具体取决于前列中的内容..

【问题讨论】:

  • 为什么子类需要一个单独的表?您是否将“类”存储在主表中?
  • 我想不一定。我想更好的问题是我可以让一列根据它旁边的列拉回不同的数据。也就是说,如果 RuleClass 是 A 那么 SubClass 会寻找 ThisColumn 如果 RuleClass 是 B 然后 SubClass 会寻找 ThatColumn 等等...

标签: sql sql-server sql-server-2008 sql-update case


【解决方案1】:

您可以在group by 子句中包含case 语句:

select class,
       (case when WHEN RuleClass = 'Fruit' THEN H.NAME
                  WHEN RuleClass = 'Vegetables' THEN H.COLOR
                  WHEN RuleClass = 'President' THEN H.PARTY
                  ELSE H.City
        END) as subclass,
      count(*)
from t
group by (case when WHEN RuleClass = 'Fruit' THEN H.NAME
               WHEN RuleClass = 'Vegetables' THEN H.COLOR
               WHEN RuleClass = 'President' THEN H.PARTY
               ELSE H.City
          ENd);

您无需将其作为单独的字段添加到表格中。

【讨论】:

  • 这正是我所需要的。谢谢
【解决方案2】:

示例如下:

UPDATE F
SET SubClass = (CASE WHEN RuleClass = 'Fruit' THEN H.NAME
                     WHEN RuleClass = 'Vegetables' THEN H.COLOR
                     WHEN RuleClass = 'President' THEN H.PARTY
                     ELSE H.City
                END)
FROM #Holdings H
JOIN #FakeTable F ON H.<COLUMNAME>=F.<COLUMNNAME>
WHERE F.SubClass = NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多