划分两个SQL交叉表的值

时间:2012-01-11 17:33:14

标签: sql ms-access count crosstab

我想创建两个交叉表,然后取两者的比率来获得百分比。第一个看起来像这样:

TRANSFORM Count([Deal Data ECM].[Fees (Y/N)]) AS [CountOfFees (Y/N)]
SELECT [Deal Data ECM].[Deal Type]
FROM [Deal Data ECM]
WHERE ((([Deal Data ECM].[Fees (Y/N)])="Y"))
GROUP BY [Deal Data ECM].[Deal Type]
PIVOT [Deal Data ECM].[Deal Region];

并且第二个应该具有相同的一切,除了费用(Y / N)将被设置=“N”。然后我想在每个表中划分相应的值。有没有办法在一个SQL表达式中执行此操作?

编辑:

让我们假设query1和2的结果如下:

Query1
    Blue  Red
Cat  1     2
Dog  3     4

Query2
    Blue  Red
Cat  5     10
Dog  15    20

I want Query 3 to result in:

Query3
    Blue  Red
Cat  .5    .5
Dog  .5    .5

编辑2:这就是数据的样子。更具体地说,每个查询的结果如下所示:

          Region1 Region2 Region3
Dealtype1 some numbers in each of these cells
Dealtype2
Dealtype3

我不确定为什么你需要实际数据,上面的例子会有相同的解决方案(我只想知道语法,使用什么SQL语句等)

解决方案:

TRANSFORM Sum(IIf([Disclosed Fees (Y/N)]="Y",1,0))/Count([Disclosed Fees (Y/N)]) AS percent_fees_disclosed
SELECT [Deal Data ECM].[Deal Type]
FROM [Deal Data ECM]
GROUP BY [Deal Data ECM].[Deal Type]
PIVOT [Deal Data ECM].[Deal Region];

1 个答案:

答案 0 :(得分:0)

您可以根据在交易类型上加入的两个交叉表创建第三个查询。

在查询设计窗口中,创建Query1:

TRANSFORM Count([Deal Data ECM].[Fees (Y/N)]) AS [CountOfFees1]
SELECT [Deal Data ECM].[Deal Type]
FROM [Deal Data ECM]
WHERE ((([Deal Data ECM].[Fees (Y/N)])="Y"))
GROUP BY [Deal Data ECM].[Deal Type]
PIVOT [Deal Data ECM].[Deal Region];

接下来,创建Query2:

TRANSFORM Count([Deal Data ECM].[Fees (Y/N)]) AS [CountOfFees2]
SELECT [Deal Data ECM].[Deal Type]
FROM [Deal Data ECM]
WHERE ((([Deal Data ECM].[Fees (Y/N)])="N"))
GROUP BY [Deal Data ECM].[Deal Type]
PIVOT [Deal Data ECM].[Deal Region];

最后,创建Query3:

SELECT Query1.[DealRegion1], Query2.[DealRegion1], 
       Query2.[DealRegion2], Query1.[DealRegion2]
FROM Query1 
INNER JOIN Query2 
ON Query1.[Deal Type] = Query2.[Deal Type];

您可以将字段从一个表或查询拖到下一个以创建连接。 INNER JOIN仅包含两个字段匹配的记录。

更多信息:

Fundamentals of Relational Database Design, Paul Litwin, 2003

Fundamental Microsoft Jet SQL for Access 2000
Intermediate Microsoft Jet SQL for Access 2000
Advanced Microsoft Jet SQL for Access 2000