首页 文章

具有所选版权年份范围的交叉表查询作为列 Headers

提问于
浏览
0

这是另一个与我之前在my post here发布的帖子有关的问题,但问题不同 .

在我之前的帖子中,我询问如何创建交叉表查询,该查询将根据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

这意味着,如果版权年份低于1999年,如1980年,则将计入“1999年以下”栏目 . 与上述2010年相同,如果有像2014年,2016年甚至2020年的版权年份,则该值将计入“2010年以上”栏目 .

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  |
    +--------------+--------+------------+
    

    使用union查询创建表,如下所示:

    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上测试过......

相关问题