我正在使用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
任何人都可以提供有关如何实现这一目标的建议吗?
答案 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在评论中所说的内容,并且需要将这些项目分组在一个标记他们属于该特定组的列上。