0

これは、私の以前の投稿に関連する別の質問です、別の問題があります。

前回の投稿で、著作権年の 4 年間の範囲に基づいて列を出力するクロス集計クエリを作成する方法について尋ねました。答えはとても良かったのですが、今、私は別の課題に直面しています。

明確にするために、テーブルのデータは次のとおりです。

ID      CallNo      CopyrightYear
1       AH          2000
2       AB          2000
3       BC          2001
4       AH          2000
5       ZA          2005
6       BC          2001
7       AP          2003
10      ZA          2006
11      DA          2009
12      DA          2010
13      RA          1999
14      WE          1997
15      HK          1996
16      AG          2011

前の投稿に基づいて、SQL ステートメントは次のようになります。

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

出力は次のとおりです。

CallNo  1995 to 1999    2000 to 2004    2005 to 2009    2010 to 2014
AB                          1       
AG                                                          1
AH                          2       
AP                          1       
BC                          2       
DA                                          1               1
HK          1           
RA          1           
WE          1           
ZA                                          2   

私の質問は、1999 年より下で 2010 年より上の著作権年のすべての結果をどのように組み合わせることができるかということです。私が望む新しい列の出力は次のようになります。

CallNo  1999 below      2000 to 2004    2005 to 2009    2010 above
AB                          1       
AG                                                          1
AH                          2       
AP                          1       
BC                          2       
DA                                          1               1
HK          1           
RA          1           
WE          1           
ZA                                          2   

これは、1980 年のように 1999 年より下の著作権年がある場合、「1999 年より下」の列にカウントされることを意味します。上記の 2010 年と同様に、2014 年、2016 年、さらには 2020 年などの著作権年がある場合、値は「2010 年」列にカウントされます。

4

1 に答える 1

3

ピボット変換用に提供されたデータを使用して、より単純ですが時間がかかる可能性がある別の方法を試す必要があります。

そのようなテーブルを作成し、変換を行います:

+--------------+--------+------------+
| NUMOFRECORDS | CALLNO | DATERANGE  |
+--------------+--------+------------+
|            1 | AB     | 2000 2004  |
|            1 | AG     | 2010 above |
|            1 | AP     | 2000 2004  |
|            1 | DA     | 2005 2009  |
|            1 | DA     | 2010 above |
|            1 | HK     | 1999 Below |
|            1 | RA     | 1999 Below |
|            1 | WE     | 1999 Below |
|            2 | AH     | 2000 2004  |
|            2 | BC     | 2000 2004  |
|            2 | ZA     | 2005 2009  |
+--------------+--------+------------+

次のようなユニオン クエリを使用してテーブルを作成します。

SELECT count(ID) AS NumOfRecords, CallNo, '1999 Below' AS DateRange
FROM table1
WHERE CopyrightYear <= DateValue('1-1-1999')
GROUP BY CallNo;

UNION
SELECT count(ID) as NumOfRecords, CallNo, '2000 2004' as DateRange
FROM table1
WHERE CopyrightYear between DateValue('1-1-2000') and DateValue('1-1-2004')
GROUP BY CallNo

UNION
SELECT count(ID) as NumOfRecords, CallNo, '2005 2009' as DateRange 
FROM table1
WHERE CopyrightYear between DateValue('1-1-2005') and DateValue('1-1-2009')
GROUP BY CallNo

UNION
SELECT count(ID) as NumOfRecords, CallNo, '2010 above' as DateRange
FROM table1
WHERE CopyrightYear >= DateValue('1-1-2010')
GROUP BY CallNo

そのクエリを次のようなクロス集計クエリに使用します。

TRANSFORM Sum(Query1.NumOfRecords) AS SumOfNumOfRecords
SELECT Query1.CallNo
FROM Query1
GROUP BY Query1.CallNo
PIVOT Query1.DateRange;

MS-Access 2010 でテスト済み...

于 2013-03-07T15:22:52.157 に答える