【问题标题】:SQL pivot - cross tab and multiple columnsSQL 数据透视表 - 交叉表和多列
【发布时间】:2014-07-12 12:02:38
【问题描述】:

我有 2 个交叉表查询都有效,但我想将它们组合在一起。

第一个显示在每个基地使用各种车辆的总时间:

TRANSFORM Sum(Cdbl(Nz(M.dtTripTime, 0))) AS SheetTime

SELECT M.lngVehicleID
    ,Sum(Cdbl(Nz(M.dtTripTime, 0))) AS Total
FROM tblSheets M
INNER JOIN Bases B ON M.lngBaseID = B.BaseID
GROUP BY M.lngVehicleID
PIVOT B.BaseName IN (
        'Alpha'
        ,'Bravo'
        ,'Charlie'
        );

第二个显示每辆车在不同基地的行程次数:

TRANSFORM Count(M.lngSheetID) AS SheetCount

SELECT M.lngVehicleID
    ,Sum(Cdbl(Nz(M.dtTripTime, 0))) AS Total
FROM tblSheets M
INNER JOIN Bases B ON M.lngBaseID = B.BaseID
GROUP BY M.lngVehicleID
PIVOT B.BaseName IN (
        'Alpha'
        ,'Bravo'
        ,'Charlie'
        );

理想情况下,我希望生成一个交叉表,显示各个基地每辆车的总时间和行程次数。这可能吗?上面的查询最大限度地发挥了我在 SQL 上非常有限的能力!

【问题讨论】:

  • 你在用什么风格的 sql?
  • 感谢您的快速回复 - 我在 Access 2010 中工作

标签: sql ms-access pivot


【解决方案1】:

在 Access 中,交叉表只允许一个值、一个列变量和几个行变量,但您可以根据上面的两个变量进行第三次查询,键入 lngVehicleID,如下所示——我认为其他任何东西都需要 VBA 解决方案,但这是不必要的。

我假设您的交叉表已分别保存、命名和启发,crosstab1crosstab2

[未测试]

Select * from crosstab1
inner join crosstab2 on crosstab1.lngVehicleID=crosstab1.lngVehicleID
order by crosstab1.lngVehicleID

【讨论】:

    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多