将两个交叉表与动态行标题合并为一个

索诺玛德

使用MS Access,我有两个交叉表查询来汇总我的数据。一个可以让我按位置和财政季度获得数据行的总数;另一个查询可让我按位置和财政季度获得符合条件的百分比。

以下示例(为方便起见,对它们进行了简化)。

qryA:原始摘要表

Location    Period      CountIt    
Blue        FY13-Q3     Yes
Orange      FY13-Q1     No
Blue        FY14-Q1     No
Orange      FY13-Q1     Yes

然后,我有一个交叉表Yes从该CountIt获取的百分比,另一个交叉表显示每个会计季度的总计数。

交叉表#1-百分比

TRANSFORM Sum(IIf(qryA.CountIt Like "Yes",1,0))/Count(qryA.CountIt) AS PercentYes
SELECT qryA.[Location]
FROM qryA
GROUP BY qryA.[Location]
PIVOT qryA.[Period];

## Crosstab Output
Location    FY13-Q1 FY13-Q2 FY13-Q3 FY13-Q4 FY14-Q1
Blue        12%     15%     13.2%   19%     15%
Orange      9%      12%     1%      18%     12%

交叉刺#2-算一下

TRANSFORM Count(qryA.CountIt) AS FiscalCount
SELECT qryA.[Location]
FROM qryA
GROUP BY qryA.[Location]
PIVOT qryA.[Period];

## Crosstab that display total count by location and Fiscal quarter
Location    FY13-Q1 FY13-Q2 FY13-Q3 FY13-Q4 FY14-Q1
Blue        102     111     54      124     122
Orange      91      321     122     158     129 

所需的最终输出

我想创建一个组合表,以显示“是”的百分比和总数

            FY13-Q1     FY13-Q2     FY13-Q3     FY13-Q4     FY14-Q1
Location    Per%    Tot Per%    Tot Per%    Tot Per%    Tot Per%    Tot
Blue        12%     102 15%     111 13.2%   54  19%     124 15%     122
Orange      9%      91  12%     321 1%      122 18%     158 12%     129

这可能吗?如您所见,我的行标题是会计期间,并且当我添加更多数据时,我将获得更多行(它们是动态的)...我不确定如何将它们合并到期望的结果中。

谢谢!

菲奥努阿拉

由于FY13-Q1,FY13-Q2,FY13-Q3,FY13-Q4,FY14-Q1似乎是完整的列表,您可以使用 IN

TRANSFORM Sum(aTable.aNumber) AS SumOfaNumber
SELECT aTable.aText, Sum(aTable.aNumber) AS [Total Of aNumber]
FROM aTable
GROUP BY aTable.aText
PIVOT "FY" & Format(ADate,"yy") & "-Q" & Format([ADate],"q")
  In ("FY13-Q1","FY13-Q2","FY13-Q3","FY13-Q4","FY14-Q1");

您可以使用查询设计窗口中的“列标题”属性来添加标题,或者直接在SQL视图窗口中键入标题。

请注意,如果省略IN形式的值,即使有数据也不会显示该列。

如果在VBA中构建查询,则可以更改标题列表以适合要使用的四分之一,或者省略格式(FY13-01等),因此MS Access返回Qtr 1,Qtr 2等。

然后,您可以按照任何适合的方式加入数据:

SELECT atable_crosstab.[FY13-Q1],
       atable_crosstab2.[FY13-Q1] AS [Per Q1],
       atable_crosstab.[FY13-Q2],
       atable_crosstab2.[FY13-Q2] AS [Per Q2],
       atable_crosstab.[FY13-Q3],
       atable_crosstab2.[FY13-Q3] AS [Per Q3],
       atable_crosstab.[FY13-Q4],
       atable_crosstab2.[FY13-Q4] AS [Per Q4]
FROM   atable_crosstab
       INNER JOIN atable_crosstab2
           ON atable_crosstab.atext = atable_crosstab2.atext; 

但是,您将无法拥有跨两列运行的标题。

这是VBA中的草图

Sub BuildCrosstab()
Dim sBase As String
Dim iQtr, iYear, iStartYear, iEndYear
Dim sIn As String
Dim CurDate As Date
Dim qdf As QueryDef

sBase = "TRANSFORM Sum(aTable.aNumber) AS SumOfaNumber " _
& "SELECT aTable.aText, Sum(aTable.aNumber) AS [Total Of aNumber] " _
& "FROM aTable " _
& "GROUP BY aTable.aText " _
& "PIVOT ""FY"" & Format(ADate,""yy"") & ""-Q"" & Format([ADate],""q"") In "

iStartYear = Year(Date) - 1
iEndYear = Year(Date)

For iYear = iStartYear To iEndYear
    CurDate = DateSerial(iYear, 1, 1)
    For iQtr = 1 To 4
        If CurDate <= Date Then
            sIn = sIn & ",""" & "FY" & Format(CurDate, "yy") & "-Q" _
                & Format(CurDate, "q") & """"
            CurDate = DateAdd("q", 1, CurDate)
        End If
    Next
Next

sIn = "(" & Mid(sIn, 2) & ")"

''This query exists
Set qdf = CurrentDb.QueryDefs("ATable_Crosstab")
qdf.SQL = sBase & sIn

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据同一列将两个表合并为一个表

来自分类Dev

将两个表中的两列合并为一个

来自分类Dev

将两个表合并为一个表,两个表具有不同的where子句

来自分类Dev

将两个变量合并为一个

来自分类Dev

将两个公式合并为一个

来自分类Dev

将两个大块合并为一个

来自分类Dev

将两个查询合并为一个

来自分类Dev

将两个条件合并为一个

来自分类Dev

将两个选择合并为一个

来自分类Dev

将两个列表合并为一个

来自分类Dev

Typescript-将两个经过动态处理的枚举合并为一个

来自分类Dev

将两个动态SQL语句合并为一个

来自分类Dev

Mysql 将两个表合并为一个输出但结果子查询返回多于 1 行

来自分类Dev

将两个或多个表合并为一个

来自分类Dev

将两个表合并为一个,并插入行不覆盖

来自分类Dev

sql将两个不相关的表合并为一个

来自分类Dev

如何使用SQL将两个或多个表合并为一个

来自分类Dev

PHP:如何将两个HTML表合并为一个?

来自分类Dev

将两个表合并为一个并删除重复项

来自分类Dev

将两个C#数据表合并为一个

来自分类Dev

Java-将两个Excel工作表合并为一个

来自分类Dev

VLOOKUP 将两个表合并为一个

来自分类Dev

将两个空白行合并为一个

来自分类Dev

将两个mysql行合并为一个

来自分类Dev

将两个 sql 行合并为一个

来自分类Dev

Bash 将两个特定的行合并为一个

来自分类Dev

rails将两个搜索合并为一个,以显示两个结果

来自分类Dev

将两行合并为一个,从两个行中选择选定的单词

来自分类Dev

将一个对象的两个列表合并为一个