1

有没有人阅读过关于使用 TRANSFORM 语句创建交叉表查询的 MSDN 页面?

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

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

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

是的,我想从预先存在的列表中创建一个带有一组固定有序列标题的数据透视表。这是一个简化的 SQL 查询:

    将 SUM(tblData.Losses) 转换为 TotalLosses
    选择 tblData.LossType
    来自 tblData
    按 tblData.Region 分组
    PIVOT tblData. 年;

我想添加不在表中的区域名称,并且我希望这些区域以特定顺序出现。是的,我可以创建一个区域列表表并将其左连接:但这也不会强加任意顺序 - 交叉表查询始终按字母顺序从左到右对列进行排序。

而且我可能只想添加不存在数据的任意固定值。

这是 MSDN 的信息:

句法

TRANSFORM aggfunction     selectstatement     PIVOT pivotfield [IN ( value1 [, value2 [, ...]])]

TRANSFORM 语句包含以下部分:

  • aggfunction:对选定数据进行操作的 SQL 聚合函数。
  • selectstatement:一个 SELECT 语句。
  • pivotfield:要用于在查询结果集中创建列标题的字段或表达式。
  • value1 , value2:用于创建列标题的固定值。

...剩下的只是从教科书数据创建一个普通的数据透视表。

所以,我的问题是:

有没有人真正使用过固定值来创建列标题?

您的 SQL 示例会很有用。


这是关于 Microsoft Access SQL 的已发布语法的问题。

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

4

3 回答 3

4

是的,我能够在 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      |          |

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

  • 我的来源的 QComb 列中确实存在值“2_HCA_PT”和“3_HCA_PT”。
  • 我的来源的 QComb 列中存在值“1_HCA_PT”和“4_HCA_PT” 。
  • 来自我的来源的 QComb 列中有其他值未在 PIVOT 列标题中表示。我可以说是因为 31.38 > (0.30 + 7.80)。
于 2014-03-05T18:23:21.187 回答
2

尝试这个:

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 语句中的年份列表。对于日期时间数据类型,您可能必须将 ' 替换为 #。

于 2012-09-19T17:38:45.293 回答
0

基本上,如果您能够让它返回结果,则“IN (value1, value2)”位只是您指定希望在结果集中返回哪些透视列。

例如,如果没有“IN (value1, value2)”,您的表格如下所示:

ID 1 2 3 4
1 一个 b C d

添加 "IN ('2', '4')" 将返回:

ID 2 4
1 b d
于 2022-02-22T21:52:18.510 回答