如何使用LIKE进行GROUP和AVERAGE行

时间:2012-03-05 17:15:40

标签: sql group-by average sql-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

任何人都可以提供有关如何实现这一目标的建议吗?

1 个答案:

答案 0 :(得分: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在评论中所说的内容,并且需要将这些项目分组在一个标记他们属于该特定组的列上。