2013-03-07 78 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