如果这是重复的话我很抱歉(很可能)。我花了很长时间搜索,无法找到问题的准确答案。
我已经构建了一个SQL函数(在MSSQL中),它返回按年,月或者按年分组的行,具体取决于参数:
Error:
14: transitionName: string | ReactCSSTransitionGroupNames,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ property `appear`. Property not found in. See lib: flow-typed/npm/react-addons-css-transition-group_v15.x.x.js:14
153: transitionName={{
^ object literal
这可以成功地按月或按年分组,这取决于我希望报告的发展方式。
但理想情况下,我希望选择让CREATE FUNCTION get_report (@grouping VARCHAR(30))
RETURNS TABLE
AS
RETURN
(
SELECT
YEAR(t.my_date) as my_year,
CASE when @grouping = 'monthly' THEN MONTH(t.my_date) ELSE null END as my_month,
count(t.row_id) as num_rows,
round(avg(my_val),4) as avg_my_val
FROM
my_schema.my_info t
GROUP BY
year(t.my_date),
CASE when @grouping = 'monthly' THEN month(t.my_date) ELSE null END
)
完全消除分组,只显示一个项目列表。我可能会试图强迫这个查询做太多,但可能不会。我尝试了类似@grouping = 'none'
的内容,但这并不是我想要的,GROUP BY 0
似乎太乱了。
有什么建议吗?
答案 0 :(得分:2)
试试这个:
use tsql2012
create table dbo.test18
(
year int not null,
month int not null,
value int
);
insert into dbo.test18
values (2017, 4, 250), (2017, 4, 150), (2017, 4, 660), (2017, 4, 1110), (2017, 3, 1250), (2017, 2, 2540), (2017, 3, 2500)
declare @a varchar(30) = 'none'
select * from (
select grouping_id(year, month, value) as gr_id, year, month, sum(value) as sm
from dbo.test18
group by grouping sets((year), (month), (year, month), (year, month, value))
) t
where
gr_id < case when @a = 'none' then 1 else 999 end
and gr_id > case when @a = 'none' then -1 else 0 end
答案 1 :(得分:1)
您不能参数化分组 - 类似地,您无法参数化查询结构(因为它将导致不同的执行计划无法缓存)。
有三种解决方案: