2013-03-07 80 views
1

我有,我想创建一个交叉表查询以下数据:与版权年份范围为列标题,交叉表查询

ID CallNo  CopyrightYear 
1 AH   2000 
2 AB   2000 
3 BC   2000 
4 AH   2002 
5 ZA   2005 
6 BC   2001 
7 AP   2003 

这是交叉表查询,我目前有:

TRANSFORM Count(Table1.[ID]) AS CountOfID 
SELECT Table1.[CallNo], Count(Table1.[ID]) AS [Total Of ID] 
FROM Table1 
GROUP BY Table1.[CallNo] 
PIVOT Table1.[CopyrightYear]; 

所以我的问题是如何分组版权年如2000年至2002年和2003年至2005年等...

预期结果:

CallNo  2000 to 2002 2003 to 2005 
AB    1 
AH    2 
AP        1 
BC    2 
ZA        1 
+0

您可能希望将预期结果(基于您的示例数据)添加到您的帖子中。 – 2013-03-07 03:54:11

+0

@ PM77-1我已编辑我的帖子,以包括预期的结果。 – jaypabs 2013-03-07 04:03:08

回答

1

这里是你的答案:

TRANSFORM Count(tab1.[ID]) AS CountOfID 
SELECT tab1.[CallNo], Count(tab1.[ID]) AS [Total Of ID] 
FROM tab1 
GROUP BY tab1.[CallNo] 
PIVOT CStr(Int(([CopyrightYear]+1)/3)*3-1)+' to '+CStr(Int(([CopyrightYear]+1)/3)*3+1); 

事实上,你可以转动的Int(([CopyrightYear]+1)/3)*3-1。 CSTR的转换主要是做了美容目的

对于2000年至2004年,2005〜2009年,等的表达会(请注意这是4个年份范围值5):

TRANSFORM Count(tab1.[ID]) AS CountOfID 
SELECT tab1.[CallNo], Count(tab1.[ID]) AS [Total Of ID] 
FROM tab1 
GROUP BY tab1.[CallNo] 
PIVOT CStr(Int(([CopyrightYear])/5)*5)+' to '+CStr(Int(([CopyrightYear])/5)*5+4) 
+0

哇...非常感谢...你救了我的一天... – jaypabs 2013-03-07 05:20:35

+0

不客气。 Int(值/ n)* n始终可以在范围内正常工作。你只需要调整+和 - 部分,使它看起来不错 – cha 2013-03-07 05:28:28

+0

如果我想将其范围4年我应该改变什么样的价值?像2000年到2004年,2005年到2009年? – jaypabs 2013-03-07 05:39:58

0
SELECT CallNo, 
CASE WHEN COUNT(Copyrightyear =>2000 AND <=2002) AS '2000 to 2002', COUNT(Copyrightyear => 2003 AND <=2005) AS '2003 to 2005' 
FROM Table1 
GROUP BY CallNo 

我不确定这是否可行。

+0

我使用ms访问...在访问中不起作用的情况。 – jaypabs 2013-03-07 05:21:18