Разделение значений двух кросс-таблиц SQL - PullRequest
0 голосов
/ 11 января 2012

Я хочу создать две таблицы кросс-таблиц, а затем взять отношения двух, чтобы получить процент.Первый из них выглядит следующим образом:

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?

РЕДАКТИРОВАТЬ:

давайте представим, что результат запроса1 и 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 голосов
/ 11 января 2012

Вы можете создать третий запрос на основе двух кросс-таблиц, объединенных по типу сделки.

В окне конструктора запросов создайте 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 включает только записи, в которых совпадают оба поля.

Дополнительная информация:

Основы проектирования реляционных баз данных, Пол Литвин, 2003

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

...