如何解决有没有一种方法可以在不使用用户定义函数的情况下在SQL中动态执行查询?
我目前正在处理包含一些文档数据的表,重点放在包含文档日期和净收入的列上。我要做的是编写一条sql语句,该语句将生成一张表,该表显示每年的纯收入汇总,分为几个月,像这样:
year | january | february | ... | december
-------------------------------------------------------------------------------
2019 | [total income in jan 2019] | [total income in feb 2019] | ...
2018 | [total income in jan 2018] | ...
...
-- returns total income for given @month in given @year
CREATE FUNCTION dbo.Getincome(@year INT,@month INT)
returns INT
AS
BEGIN
DECLARE @result INT
SELECT @result = Sum(income)
FROM dk
WHERE date IS NOT NULL
AND Year(date) = @year
AND Month(date) = @month
GROUP BY Year(date)
RETURN Isnull(@result,0)
END
并执行如下查询:
SELECT Year(date) AS 'year',dbo.Getincome(Year(date),1) AS 'january',2) AS 'february',(...) dbo.getincome(year(date),12) AS 'december'
FROM dk
WHERE date IS NOT NULL
GROUP BY year(date)
ORDER BY year(date) DESC
这将生成预期表。 但是 问题是,我的老板希望我出于某种原因不使用任何功能。我可以声明变量。所以我的问题是,有没有一种方法可以在不使用函数的情况下解决?一会儿循环吗? 我知道我可以每月选择一个命令,然后将它们连接在一起,但是我正在寻找比11个连接更复杂的解决方案... 任何想法? :)
解决方法
不需要涉及该函数的复杂逻辑。据我了解您的问题陈述,您可以使用条件聚合在单个查询中获得所需的结果:
select year(date) year,sum(case when month(date) = 1 then income else 0 end) january,sum(case when month(date) = 2 then income else 0 end) february,...
from dk
group by year(date)
order by year(date)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。