Iva*_*nov 2 sql aggregate sql-server-2005 sql-server-2008
有没有办法编写强类型的 SQL Server 存储过程(即返回列的已知结果集)并使其组语句是动态的。
就像是:
SELECT SUM( Column0 ) FROM Table1
GROUP BY @MyVar
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下方法:
SELECT SUM( Column0 ) FROM Table1
GROUP BY CASE @MyVar WHEN 'Column1' THEN Column1 ELSE Column2
Run Code Online (Sandbox Code Playgroud)
第二条语句仅适用于 Column1 和 Column2 的数据库类型相同的场景。如果它们不是 SQL 引擎,则会抛出类似于以下内容的错误:“将 nvarchar 值 'SYSTEM' 转换为数据类型 [The Different TYPE] 时,转换失败。”
我能做些什么来获得强大的结果集,同时又拥有一些动态的部分——即我的情况下的石斑鱼?这将暴露给 LINQ。
编辑:
看起来你可以做到,但你不应该!绝对矫枉过正。测试显示执行计划慢了一千倍。并且它只会随着更大的结果集而变慢。
您可以对可能有用的常量进行分组
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
Run Code Online (Sandbox Code Playgroud)
编辑:对于数据类型不匹配和多个值,这允许您对两列进行分组...
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
Run Code Online (Sandbox Code Playgroud)