Палец вверх 0
Перевод
Перевод

Как группировать и AVG строки, используя LIKE

Я использую Crystal Reports v10. Мой текущий набор результатов выглядит следующим образом (есть 44 строки, это пример):

item code     item desc          cost
21010DF       DOUG FIR 2x10-10   300.00
21012DF       DOUG FIR 2x10-12   310.50
21014DF       DOUG FIR 2x10-14   313.25
21016DF       DOUG FIR 2x10-16   316.10
21018DF       DOUG FIR 2x10-18   319.56
2410DF        DOUG FIR 2x4-10    271.69
2412DF        DOUG FIR 2x4-12    273.12
2414DF        DOUG FIR 2x4-14    275.98
12CDX         PLYWOOD 1/2 CDX     15.00
34TGADV       PLYWOOD T&G ADV     24.00
58CDX         PLYWOOD 5/8 CDX     18.00

Меня попросили сгруппировать эти элементы и указать среднюю стоимость для каждой группы. Правила группировки определяются организацией (они являются случайными - некоторые являются логически группами, а некоторые строки не входят в логическую группу).

Результирующий набор должен выглядеть следующим образом:

item desc                 avg cost
DOUG FIR 2x10 (10-14)     300.00
DOUG FIR 2x10-16          316.10
DOUG FIR 2x10-18          319.56
DOUG FIR 2x4 (10-14)      271.69
PLYWOOD CDX                16.50    
PLYWOOD T&G ADV            24.00

Пока что это то, что я получил, но, похоже, не приближается к тому, что мне нужно:

SELECT item_cd, item.item_desc, AVG(inv.cst) as avg cost
FROM item, inv
WHERE item.item_id = inv.item_id
AND item.item_cd LIKE '210%DF'
GROUP BY item.item_cd, item.item_desc

Кто-нибудь может дать совет, как этого добиться?

sql sql-like average group-by
задан Piet 5 мар. 2012 г., 21:15:39
источник

1 ответ

Палец вверх 2
Перевод
Перевод

Ну, если нет логики для группировки, то это должно быть вручную, извините. В вашем случае для этого конкретного набора результатов вы можете сделать следующее:

SELECT  CASE WHEN item_cd IN ('21010DF','21012DF','21014DF') THEN 'DOUG FIR 2x10 (10-14)'
        WHEN item_cd IN ('2410DF','2412DF','2414DF') THEN 'DOUG FIR 2x4 (10-14)'
        WHEN item_cd IN ('12CDX','58CDX') THEN 'PLYWOOD CDX' ELSE item.item_desc END item_desc,
        AVG(inv.cst) as avg cost
FROM item 
LEFT JOIN inv
ON item.item_id = inv.item_id
WHERE item.item_cd LIKE '210%DF'
GROUP BY CASE WHEN item_cd IN ('21010DF','21012DF','21014DF') THEN 'DOUG FIR 2x10 (10-14)'
         WHEN item_cd IN ('2410DF','2412DF','2414DF') THEN 'DOUG FIR 2x4 (10-14)'
         WHEN item_cd IN ('12CDX','58CDX') THEN 'PLYWOOD CDX' ELSE item.item_desc END

Но вы должны делать то, что @jclozano сказал в комментарии, и иметь элементы, которые должны быть сгруппированы в столбце, отмечая, что они принадлежат к этой конкретной группе.

ответ дан Lamak 5 мар. 2012 г., 21:22:53
источник