MS-Access: суммируйте 2 значения перед построением сводной таблицы

#sql #ms-access

#sql #ms-access

Вопрос:

Итак, кто-то заказал сыр, пиво, хлеб и сигареты, и таблица tblItems выглядит так:

 iID  iName       iAmount  iPrice  iProductID  iOrderID    
------------------------------------------------------
1    cheese      1        2.99    11          7
2    can of beer 6        0.99    14          7
3    bread       1        2.25    15          7
4    cigarettes  1        6.99    16          7
 

Прежде чем передать этот заказ в TRANSFORM запрос, мне нужно

  • суммируйте все пункты с помощью iProductID = 11 OR iProductID = 15
  • назовите это как food
  • и назначьте ему iProductID = 99
  • iProductIDs, кроме того, что 14 или 99 должны быть отфильтрованы

Я не хочу изменять данные, tblItems хотя.

Мне нужно, чтобы это выглядело так:

 iID  iName        iAmount  iPrice  iProductID  iOrderID
-------------------------------------------------------
1    food         1        5.24    99          7
2    can of beer  6        0.99    11          7
 

Я возился больше часа и, похоже, просто не могу этого понять.

Фильтрующая часть проста.

 SELECT * FROM tblItems WHERE iProductID = 11 OR iProductID = 99
 

Это часть агрегирования, которая вызывает у меня головную боль.

Может кто-нибудь, пожалуйста, помочь и указать мне правильное направление?

Комментарии:

1. В высшей степени неортодоксально помещать столбцы таблицы в строки, а строки — в столбцы. Это делает ваш вопрос более сложным, чем это необходимо для понимания.

2. Спасибо вам, друзья.

Ответ №1:

Вам нужен запрос агрегации:

 select iif(i.productid in (11, 15), 99, i.productid) as productid,
       "food" as iName,
      sum(i.price) as price,
       i.orderid
from tblItems as i
where i.iproductid in (11, 15, 14)
group by iif(i.productid in (11, 15), 99, i.productid), i.orderid;
 

Комментарии:

1. can of beer не должно быть названо как food будто.