#sql #db2
Вопрос:
Учитывая 2 таблицы, мне нужна сгруппированная сводка наград за покупки. Больше предметов означает больше наград.
корзина вкладок
ID | Имя | шоппинг_но | Тип |
---|---|---|---|
001 | Майк | 00001 | A |
002 | Майк | 00001 | A |
003 | Майк | 00001 | A |
004 | Том | 00002 | B |
005 | Том | 00002 | B |
006 | Тони | 00003 | A |
007 | Heinz | 00004 | A |
tab_award
Товары | награда | тип_авард |
---|---|---|
1 | 0.05 | A |
2 | 0.50 | A |
3 | 0.90 | A |
4 | 1.00 | A |
1 | 0.15 | B |
2 | 0.70 | B |
3 | 1.10 | B |
4 | 1.30 | B |
В результате мне нужна следующая таблица.
награда | Товары | шоппинг_но | тип _авард |
---|---|---|---|
0.90 | 3 | 00001 | A |
0.70 | 2 | 00002 | B |
0.05 | 1 | 00003 | A |
0.05 | 1 | 00004 | A |
Моя попытка решения. Я каждый раз получаю только null в качестве результата для награды (результат else) или ошибку «sql0811 результат выбора более одной строки». Я рад любой помощи, спасибо!
SELECT award,
items,
shopping_no,
type_award
FROM tab_basket t
LEFT OUTER JOIN tab_award u ON t.TYPE = u.type_award
AND CASE WHEN (SELECT COUNT(shopping_no)
FROM tab_basket m
WHERE t.id = m.id
AND t.name = m.name
AND t.shopping_no = m.shopping_no
AND t.TYPE = u.TYPE
GROUP BY shopping_no ) = '1' THEN '1'
case WHEN (SELECT COUNT(shopping_no)
FROM tab_basket m
WHERE t.id = m.id
AND t.name = m.name
AND t.shopping_no = m.shopping_no
AND t.TYPE = u.TYPE
GROUP BY shopping_no ) = '2' THEN '2'
CASE WHEN (SELECT COUNT(shopping_no)
FROM tab_basket m
WHERE t.id = m.id
AND t.name = m.name
AND t.shopping_no = m.shopping_no
AND t.TYPE = u.TYPE
GROUP BY shopping_no ) = '3' THEN '3'
CASE WHEN (SELECT COUNT(shopping_no)
FROM tab_basket m
WHERE t.id = m.id
AND t.name = m.name
AND t.shopping_no = m.shopping_no
AND t.TYPE = u.TYPE
GROUP BY shopping_no ) = '4' THEN '4'
ELSE 'no_price'
END = u.award
Ответ №1:
Вы можете сначала объединить таблицу tab_basket, а затем объединить ее с таблицей tab_award —
SELECT TB.award, TB.items, TA.shopping_no, TB.type_award
FROM (SELECT name, shopping_no, type, COUNT(*) CNT
FROM tab_basket
GROUP BY name, shopping_no, type) TB
JOIN tab_award TA ON TB.type = TA.type_award
AND TB.CNT = TA.items