1

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

例如。

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

水果一起以他们的名字命名 Vegetabels 由他们的颜色总统由他们的派对和体育由他们的城市组成。(好吧,我告诉过你我会有一个不好的例子)

无论如何,我希望做的是 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

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

4

2 回答 2

0

这是示例:

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
于 2013-08-02T18:48:03.363 回答
0

您可以casegroup by子句中包含语句:

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);

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

于 2013-08-02T19:04:08.547 回答