我有一个表,它有一个名为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

10-04 13:26