我不得不选择从SQL Sever的表中多个日期范围即数据选择数据范围为指定的列的SQL Server
1990-1994, 1992-1996, 1994-1998, 1996-2000, 1998-2002, 2000-2004,
2002-2006, 2004-2008, 2006-2010, 2008-2012, 2010-2014
我已经使用这个查询来获取无DATE范围数据即
SELECT
aid, research_area_category_id,
CAST(research_area as VARCHAR(100)) [research_area],
COUNT(*) [Counting]
FROM
sub_aminer_paper
GROUP BY
CAST(research_area as VARCHAR(100)), aid, research_area_category_id
HAVING
aid = 12403
ORDER BY
Counting DESC
这给出输出作为图像即
现在对于使用WHERE
子句的每个DATE范围,我必须在DATE范围的相应列中显示数据。虽然我已经使用这个查询即
SELECT
aid, research_area_category_id,
[research_area] = CAST(research_area as VARCHAR(100)),
[Counting] = COUNT(*),
[1990 - 1994] = SUM(CASE WHEN p_year BETWEEN 1990 AND 1994 THEN 1 ELSE 0 END),
[1992 - 1996] = SUM(CASE WHEN p_year BETWEEN 1992 AND 1996 THEN 1 ELSE 0 END),
[1994 - 1998] = SUM(CASE WHEN p_year BETWEEN 1994 AND 1998 THEN 1 ELSE 0 END),
[1996 - 2000] = SUM(CASE WHEN p_year BETWEEN 1996 AND 2000 THEN 1 ELSE 0 END),
[1998 - 2002] = SUM(CASE WHEN p_year BETWEEN 1998 AND 2002 THEN 1 ELSE 0 END),
[2000 - 2004] = SUM(CASE WHEN p_year BETWEEN 2000 AND 2004 THEN 1 ELSE 0 END),
[2002 - 2006] = SUM(CASE WHEN p_year BETWEEN 2002 AND 2006 THEN 1 ELSE 0 END),
[2004 - 2008] = SUM(CASE WHEN p_year BETWEEN 2004 AND 2008 THEN 1 ELSE 0 END),
[2006 - 2010] = SUM(CASE WHEN p_year BETWEEN 2006 AND 2010 THEN 1 ELSE 0 END),
[2008 - 2012] = SUM(CASE WHEN p_year BETWEEN 2008 AND 2012 THEN 1 ELSE 0 END),
[2010 - 2014] = SUM(CASE WHEN p_year BETWEEN 2010 AND 2014 THEN 1 ELSE 0 END)
FROM
sub_aminer_paper
WHERE
aid = 2937
AND p_year BETWEEN 1990 AND 2014
GROUP BY
aid, CAST(research_area AS VARCHAR(100)), research_area_category_id
ORDER BY aid ASC, Counting DESC
而这个查询输出这样的:
,但我需要下(1990- 1994年,1992- 1996年,1994- 1998年research_area_category_id
值...这些专栏。例如。在1990 - 1994
柱,它应该显示各research_area_category_id
即1
,1
和32
代替Counting
即1
,1
和1
,类似地它应该显示33
代替2
在1998 - 2002
柱,反之亦然。
请帮助和提前致谢。
你想添加您的日期范围为列? –
@FelixPamittan绝对是 – maliks
'HAVING'只能用于**集合**,例如'COUNT','MAX','AVG'等等 - 而不是像这样基本的表达方式 - 使用'WHERE援助= 12403'代替 –