Умножение значений из двух таблиц доступа - PullRequest
2 голосов
/ 29 июня 2011

У меня есть две таблицы, как показано ниже в Accecss 2007.

Town Table
----------
TownName | FlatCount | DetachedCount | SemiCount
A        | 5         | 3             | 4
B        | 2         | 6             | 3

Cost Table
----------
Prop     | PCost
Flat     | 10
Detached | 20
Semi     | 30

Я хотел бы получить вывод, подобный приведенному ниже, умножив таблицу Count из таблицы Town на соответствующий PCost в таблице Cost.FlatCost = Town.FlatCount * Cost.PCost для квартиры.

Results
-------
Town | FlatCount | FlatCost | DetachedCount | DetachedCost | .....
A    | 5         | 50       | 3             | 60           |
B    | 2         | 20       | 6             | 120          |

Я пытался сделать это с помощью IIF, но не уверен, как получить PCost для каждого типа свойства в предложении IIF.

Спасибо

Ответы [ 3 ]

4 голосов
/ 29 июня 2011

Похоже, вы смешиваете данные и метаданные, например, значение данных Flat в таблице Cost становится значением метаданных (имя столбца) FlatCount в таблице Town. Это не очень хорошая идея, и, вероятно, поэтому у вас возникают трудности при написании простого запроса.

Перестройте таблицу Town, чтобы в ней были столбцы TownName, Prop и PCount. И помните, что большинство плохих SQL DML вызвано плохими SQL DDL ;)

3 голосов
/ 29 июня 2011

Вы можете использовать подзапрос, чтобы получить стоимость предмета:

select  TownName
,       FlatCount
,       FlatCount * (select PCost from Cost where Prop = 'Flat') as FlatCost
,       DetachedCount
,       DetachedCount * (select PCost from Cost where Prop = 'Detached') 
            as DetachedCost
,       ... 
from    Town
1 голос
/ 29 июня 2011

Вы должны скрестить таблицы. Затем, для хороших значений, поместите PCost в умножение, иначе, положите 0.

Затем вы можете сделать СУММ, используя группу:

SELECT t.Town, 
       t.FlatCount, 
       SUM(t.FlatCount * IIF(c.Prop = 'Flat', c.PCost, 0)) AS FlatCost,
       t.DetachedCount,
       SUM(t.DetachedCount * IIF(c.Prop = 'Detached', c.PCost, 0)) AS DetachedCost,
FROM Town t, Cost c
GROUP BY t.Town, t.FlatCount, t.DetachedCount
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...