#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
будто.