【发布时间】:2014-06-03 20:28:10
【问题描述】:
我想弄清楚的是如何自动计算每个月从过去 4 个月到当前月份的资助日期总数。例如,因为现在是六月,我想要二月、三月、四月和五月的资金账户。这是我现在拥有的编解码器,似乎无法弄清楚。
DECLARE @Year int
set @Year = 2013
SELECT
d.name, a.dealer_code, b.last_name, b.city, b.state, b.phone
, COUNT(CASE WHEN MONTH(c.Funded_date) = 1 THEN 1 ELSE NULL END) January
, COUNT(CASE WHEN MONTH(c.Funded_date) = 2 THEN 1 ELSE NULL END) February
, COUNT(CASE WHEN MONTH(c.Funded_date) = 3 THEN 1 ELSE NULL END) March
, COUNT(CASE WHEN MONTH(c.Funded_date) = 4 THEN 1 ELSE NULL END) April
, COUNT(CASE WHEN MONTH(c.Funded_date) = 5 THEN 1 ELSE NULL END) May
, COUNT(CASE WHEN MONTH(c.Funded_date) = 6 THEN 1 ELSE NULL END) June
, COUNT(CASE WHEN MONTH(c.Funded_date) = 7 THEN 1 ELSE NULL END) July
, COUNT(CASE WHEN MONTH(c.Funded_date) = 8 THEN 1 ELSE NULL END) August
, COUNT(CASE WHEN MONTH(c.Funded_date) = 9 THEN 1 ELSE NULL END) September
, COUNT(CASE WHEN MONTH(c.Funded_date) = 10 THEN 1 ELSE NULL END) October
, COUNT(CASE WHEN MONTH(c.Funded_date) = 11 THEN 1 ELSE NULL END) November
, COUNT(CASE WHEN MONTH(c.Funded_date) = 12 THEN 1 ELSE NULL END) December
FROM
tdealer a
JOIN
tContact b ON a.contact_id = b.contact_id
JOIN
tContract c ON a.dealer_id = c.dealer_id
JOIN
tCompany d ON c.company_id = d.company_id
WHERE
a.dealer_code = '0003594' and YEAR(c.Funded_date) = @Year
GROUP BY
d.name,
a.dealer_code,
b.last_name,
b.city, b.state, b.phone
【问题讨论】:
-
如果现在是 2 月,您是只想要 1 月,还是去年 10 月 + 11 月 + 12 月 + 1 月?
-
什么不适合你?这段代码看起来不错,您只是不确定如何将其限制为最近 4 个月?
-
您使用的是什么数据库提供程序?数据库服务器?甲骨文?请解释如果前四个月将跨入上一年,查询应该如何工作。为什么在提及当前时间时使用@Year 参数。月份应该作为参数传入还是使用 SYSDATE/GETDATE() 检索?
-
我正在使用 MySQL 服务器 2008 R2。另外@GoatCo 我想要本月过去的 4 个月。所以现在是六月,所以我想要二月、三月、四月和五月的资金账户。我希望 Date 函数能够自动知道每次用户输入日期。