首页 文章

交叉表查询:使用固定值创建其他列

提问于
浏览
1

有没有人在使用TRANSFORM语句创建交叉表查询时阅读MSDN页面?

http://msdn.microsoft.com/en-us/library/office/bb208956(v=office.12).aspx

它包括以下断言,不受代码示例支持:

您还可以包含不存在数据的固定值,以创建其他列 .

是的,我想创建一个数据透视表,其中包含来自预先存在的列表的固定 ordered 列 Headers 集 . 这是一个简化的SQL查询:

TRANSFORM SUM(tblData.Losses) As TotalLosses
    SELECT tblData.LossType
    FROM tblData
    GROUP BY tblData.Region
    PIVOT tblData.Year;

我想添加表中没有的区域名称,我希望这些区域按特定顺序显示 . 是的,我可以创建一个区域列表表并左键加入它:但是这也不会强加任意顺序 - 交叉表查询总是按字母顺序从左到右对列进行排序 .

我可能只想添加没有数据的任意固定值 .

这是MSDN的信息:

语法TRANSFORM aggfunction selectstatement PIVOT pivotfield [IN(value1 [,value2 [,...]])] TRANSFORM语句包含以下部分:aggfunction:对所选数据进行操作的SQL聚合函数 . selectstatement:SELECT语句 . pivotfield:要用于在查询结果集中创建列 Headers 的字段或表达式 . value1,value2:用于创建列 Headers 的固定值 .

......其余的只是从教科书数据创建一个普通的香草数据透视表 .

所以,我的问题是:

有没有人真正使用固定值来创建列 Headers ?

SQL的示例将非常有用 .


这是有关Microsoft Access SQL的已发布语法的问题 .

感谢您不要问我为什么要这样做,给出了冗长的SQL示例,回答了“是否有ANSI SQL通过对所有内容进行硬编码来完成TRANSFORM语句的功能?”或者指出在大型机上Postgres会更容易 .

2 回答

  • 1

    是的,我能够在Access中使用固定的四个值进行此操作 .

    TRANSFORM Sum([Shape_Length]/5280) AS MILES
    SELECT "ONSHORE" AS Type, Sum(qry_CurYrTrans.Miles) AS [Total Of Miles]
    FROM qry_CurYrTrans
    GROUP BY "ONSHORE"
    PIVOT qry_CurYrTrans.QComb IN ('1_HCA_PT','2_HCA_PT','3_HCA_PT','4_HCA_PT');
    

    我的结果是:

    | Type     | Total Of Miles  | 1_HCA_PT  | 2_HCA_PT  | 3_HCA_PT  | 4_HCA_PT |
    | ONSHORE  | 31.38           |           | 0.30      | 7.80      |          |
    

    从这个结果,我可以确定一些事情:

    • 值'2_HCA_PT'和'3_HCA_PT'确实存在于我的源QComb列中 .

    • 我的源列QComb中不存在值'1_HCA_PT'和'4_HCA_PT' .

    • 我的源列QComb中还有其他值未在PIVOT列 Headers 中显示 . 我可以告诉因为31.38>(0.30 7.80) .

  • 3

    试试这个:

    TRANSFORM Sum(tblData.Losses) AS TotalLosses
    SELECT tblData.Region, tblData.LossType
    FROM tblData
    GROUP BY tblData.Region, tblData.LossType
    PIVOT tblData.Year In ('2001','2000');
    

    关键是PIVOT声明中的年份列表 . 您可能必须将'with#替换为datetime数据类型 .

相关问题