SQL Server 2005/2008 带参数的 Group By 语句而不使用动态 SQL?

2023-11-30

有没有一种方法可以编写强类型的 SQL Server 存储过程(即返回已知的列结果集)并使其组语句是动态的。

就像是:

SELECT SUM( Column0 ) FROM Table1
GROUP BY @MyVar

我也尝试了以下方法:

SELECT SUM( Column0 ) FROM Table1
GROUP BY CASE @MyVar WHEN 'Column1' THEN Column1 ELSE Column2

第二条语句仅适用于Column1和Column2的db类型相同的场景。如果不是,SQL 引擎会抛出类似以下内容的错误:“将 nvarchar 值“SYSTEM”转换为数据类型 [不同类型] 时,转换失败。”

我该怎么做才能获得强大的结果集,同时又拥有一些动态部分 - 即我的例子中的石斑鱼?这将暴露给 LINQ。

EDIT:

看起来你可以做到,但你不应该这样做!绝对是矫枉过正。测试显示执行计划慢了数千倍。结果集越大,它只会变得更慢。


您可以对可能有用的常量进行分组

SELECT
    SUM(Column0),
    CASE @MyVar WHEN 'Column1' THEN Column1 ELSE '' END AS MyGrouping
FROM
    Table1
GROUP BY
    CASE @MyVar WHEN 'Column1' THEN Column1 ELSE '' END

编辑:对于数据类型不匹配和多个值,这允许您对两列进行分组...

SELECT
    SUM(Column0),
    CASE @MyVar WHEN 'Column1' THEN Column1 ELSE NULL END AS Column1,
    CASE @MyVar WHEN 'Column2' THEN Column2 ELSE NULL END AS Column2
FROM
    Table1
GROUP BY
    CASE @MyVar WHEN 'Column1' THEN Column1 ELSE NULL END,
    CASE @MyVar WHEN 'Column2' THEN Column2 ELSE NULL END
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 2005/2008 带参数的 Group By 语句而不使用动态 SQL? 的相关文章

随机推荐