我有一个表,它有一个名为tableNum的列和另一个名为deviceNum的列
我想按tableNum分组,但如果tableNum为空,则需要按deviceNum分组。
我现在已经用一个联合声明来做了,这样我可以做两个不同的声明,但是我想知道是否有更好的方法。
非常感谢
戴夫
最佳答案
保留UNION
并根据需要使用UNION ALL
使其工作。
它可能比其他解决方案快得多(或者可以优化运行)。
我不想翻译这个,或者在没有UNION
的情况下优化它:
SELECT tableNum
, NULL AS deviceNum
, COUNT(DISTINCT deviceNum) AS cnt
FROM TableX
WHERE tableNum IS NOT NULL
GROUP BY tableNum
UNION ALL
SELECT NULL
, deviceNum
, COUNT(*)
FROM TableX
WHERE tableNum IS NULL
GROUP BY deviceNum