想要这样做的原因是,我需要按照四种不同的方式对数据进行分组,但仍然需要将它们作为一个结果集返回。
例如。
我真的不能想到一个实际的例子,但在我正在做的事情中这是必要的。想象一下,如果我回来了水果,蔬菜,总统和体育,但我想将所有
分组以他们的名字结合在一起 蔬菜的颜色 总统由他们的党和 他们的城市体育。 (好吧,我告诉过你我有一个不好的例子)
无论如何,我希望做的是GROUP BY我称之为'SubClass'的东西。为了做到这一点,'SubClass'将寻找'RuleClass'来确定它应该返回什么代码。这甚至可能吗?类似的东西...
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
因此,该列将从另一个临时表中的另一列中取出,取决于感知列中的内容。
答案 0 :(得分: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
答案 1 :(得分:0)
您可以在case
子句中包含group 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);
您无需将其作为单独的字段添加到表中。