我可以根据参数确定GROUP BY子句吗?

1 sql sql-server sql-server-2008

我正在处理存储过程,我正在尝试减小IF块的大小,并想知道是否可以根据参数确定GROUP BY子句.我会告诉你我的意思:

这不是SQL代码,而是写成我想要实现的内容......

SELECT...

GROUP BY
IF @groupBy = 0
    DATEPART(yy, MyDBDateField)
ELSEIF @groupBy = 1
    DATEPART(yy, MyDBDateField),
    DATEPART(m, MyDBDateField)
ELSE
    DATEPART(yy, MyDBDateField),
    DATEPART(m, MyDBDateField),
    DATEPART(d, MyDBDateField)
Run Code Online (Sandbox Code Playgroud)

所以,我正在尝试按年份,月份或日期对数据进行分组,具体取决于参数.听起来很简单,但看起来我必须将语句复制粘贴到IF块中.

任何帮助表示感谢 - 谢谢!

gbn*_*gbn 6

你可以CASE它:但你也需要在SELECT中使用相同的表达式

SELECT
   ...,
   DATEPART(yy, MyDBDateField),
   CASE WHEN @groupBy = 1 THEN DATEPART(m, MyDBDateField) ELSE NULL END,
   CASE WHEN @groupBy = 2 THEN DATEPART(d, MyDBDateField) ELSE NULL END
FROM



GROUP BY
   DATEPART(yy, MyDBDateField),
   CASE WHEN @groupBy = 1 THEN DATEPART(m, MyDBDateField) ELSE NULL END,
   CASE WHEN @groupBy = 2 THEN DATEPART(d, MyDBDateField) ELSE NULL  END
Run Code Online (Sandbox Code Playgroud)