Как группировать и AVG строки, используя LIKE - PullRequest
0 голосов
/ 05 марта 2012

Я использую 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

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

1 Ответ

2 голосов
/ 05 марта 2012

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

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 сказал в комментарии, и иметь элементы, которые должны быть сгруппированы по маркировке столбца.что они принадлежат к этой конкретной группе.

...