我有以下数据,
started ended theDate theYear themonth growth division teams status location
2 0 8/31/2019 2019 8 2 Unknown Team A ACTIVE Town A
1 0 5/31/1996 1996 5 1 Unknown Team B ACTIVE Town A
1 0 8/31/2014 2014 8 1 Unknown Team B ACTIVE Town B
1 0 1/31/1996 1996 1 1 Unknown Team B ACTIVE Town C
1 0 7/31/2004 1985 7 1 Unknown Team C ACTIVE Town E
1 0 7/31/1985 1985 7 1 Unknown Team B ACTIVE Town A
1 0 5/31/2019 2019 5 1 Unknown Team A ACTIVE Town F
“开始”列显示在该特定日期加入的员工。增长列开始-结束是结束的剩余员工人数。
我有以下查询,只要我指定变量即可正确提取数据。
set @theYear = 2019 ;
set @team = 'Team A' ;
SELECT
t1.growth,
SUM(t2.growth) AS Emp_Count,
CASE
WHEN t1.theYear IS NULL THEN t1.theYear
ELSE t1.theYear
END AS theYear,
t1.team,
t1.location,
t1.division,
t1.status,
CASE
WHEN t1.Month = 1 THEN 'JAN'
WHEN t1.Month = 2 THEN 'FEB'
WHEN t1.Month = 3 THEN 'MAR'
WHEN t1.Month = 4 THEN 'APR'
WHEN t1.Month = 5 THEN 'MAY'
WHEN t1.Month = 6 THEN 'JUN'
WHEN t1.Month = 7 THEN 'JUL'
WHEN t1.Month = 8 THEN 'AUG'
WHEN t1.Month = 9 THEN 'SEP'
WHEN t1.Month = 10 THEN 'OCT'
WHEN t1.Month = 11 THEN 'NOV'
WHEN t1.Month = 12 THEN 'DEC'
END AS myMONTH
FROM
(SELECT
CASE
WHEN r.growth IS NOT NULL THEN r.growth
WHEN r.growth IS NULL THEN 0
END AS growth,
r.theYear,
r.team,
r.division,
r.location,
t.mon_num AS Month,
r.status
FROM
Reports r
RIGHT JOIN (SELECT 1 mon_num UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) t ON t.mon_num = r.themonth
AND r.theYear = (select @theYear)
AND r.team = (select @team)
GROUP BY r.growth , Month
ORDER BY t.mon_num ASC) AS t1
JOIN
(SELECT
CASE
WHEN r2.growth IS NOT NULL THEN r2.growth
WHEN r2.growth IS NULL THEN 0
END AS growth,
r2.theYear,
r2.team,
r2.division,
r2.location,
t.mon_num AS Month,
r2.status
FROM
Reports r2
RIGHT JOIN (SELECT 1 mon_num UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12) t ON t.mon_num = r2.themonth
AND r2.theYear = (select @theYear)
AND r2.team = (select @team)
GROUP BY r2.growth , Month
ORDER BY t.mon_num ASC) AS t2 ON t1.Month >= t2.Month
GROUP BY t1.Month;
如您在下面看到的那样,查询将列出月份(即Jan,feb等)以及所选数据以及增量计数。
但是,如果我要使用不带变量的查询,即获取所有没有任何条件/过滤器的数据,我得到的结果是不正确的。首先,它应该以1985年开始,因为我的数据集中确实有1985年。
答案 0 :(得分:0)
这是一个非常复杂的查询。明智的程序员可以一次对子查询进行此类故障排除。
您的查询包含以下代码:
AND r.theYear = (select @theYear)
如果未定义@ -variable,应该怎么办?
您想要这样的东西吗?
AND (@theYear IS NULL OR r.theYear=@theYear)
如果您的@ -variable为NULL,则不会按年份过滤。