我是postgresql的新手,所以我甚至不知道我是否走在正确的轨道上。这就是我想要的结果: Web Web其他Dist Dist 周数销售额销售额销售数量
8/18/2014 1120 74436.60 1068 38516.44 28034 244504.64
8/4/2014 653 39850.225 34726 476872.65 7962 255772.98
7/28/2014 760 40740.295 28009 950602.16 3222 145952.57
7/21/2014 913 48877.47 34082 1286582.67 6332 247922.63
7/14/2014 977 79177.73 22147 828173.65 21542 286437.43
7/7/2014 918 58949.72 49302 1253558.70 4129 211738.23
记录按周汇总,并从1列和1个计算列创建:1。订单数量2.订单数量*单价。我使用case语句根据销售类型或Customer类型将它们分成不同的列。 (销售类型INT = Web,销售类型非INT =其他,客户类型DIST = Dist)
我使用的代码如下所示。
SELECT
cast(date_trunc('week', cohead_orderdate) AS date) AS week,
-- Web Quantity Sold
CASE WHEN saletype_code = 'INT' THEN
SUM(invcitem_billed)
END AS web_qty,
-- Web $ Sales
CASE WHEN saletype_code = 'INT' THEN
SUM(invcitem_billed * invcitem_price)
END AS web_sales,
-- All Other Quantities Sold (phone, fax, email, etc.)
CASE WHEN saletype_code != 'INT' THEN
SUM(invcitem_billed)
END AS other_qty,
-- All Other $ Sales (phone, fax, email, etc.)
CASE WHEN saletype_code != 'INT' THEN
SUM(invcitem_billed * invcitem_price)
END AS other_sales,
-- Dist Quantities Sold
CASE WHEN custtype_code = 'DIST' THEN
SUM(invcitem_billed)
END AS dist_qty,
-- Dist Other $ Sales
CASE WHEN custtype_code = 'DIST' THEN
SUM(invcitem_billed * invcitem_price)
END AS dist_sales
FROM cohead ordhdr
LEFT JOIN saletype ON (cohead_saletype_id = saletype_id)
LEFT JOIN custinfo ON (cohead_cust_id = cust_id)
LEFT JOIN custtype ON (cust_custtype_id = custtype_id)
JOIN invchead invhdr ON ordhdr.cohead_number = invhdr.invchead_ordernumber
JOIN invcitem invdtl ON invhdr.invchead_id = invdtl.invcitem_invchead_id
WHERE (cohead_status != 'X')
AND (cohead_orderdate >= <? value('startDate') ?>)
AND (cohead_orderdate <= <? value('endDate') ?>)
GROUP BY week,
saletype_code,
custtype_code
ORDER BY week DESC;
问题是它希望我在GROUP BY子句中包含我用于我的选择标准的销售类型和客户类型,这显然创建了几个分组,因此每周有几个记录。
Week Web Web Other Other Dist Dist
Qty Sales Qty Sales Qty Sales
8/4/2014 0 0 29 922.65 29 922.65
8/4/2014 0 0 575 0 0 0
8/4/2014 0 0 208 12098.16 0 0
8/4/2014 0 0 20 630.00 0 0
8/4/2014 0 0 858 34892.97 858 34892.97
8/4/2014 0 0 574 29017.78 0 0
8/4/2014 155 10605.00 0 0 0 0
7/28/2014 0 0 546 0 0 0
7/28/2014 0 0 579 29443.98 0 0
7/28/2014 0 0 1645 68356.15 1645 68356.15
7/28/2014 0 0 888 45794.48 0 0
7/28/2014 346 23638.16 0 0 0 0
7/21/2014 0 0 14 827.00 0 0
7/21/2014 0 0 106 0 106 0
7/21/2014 0 0 227 348.10 0 0
7/21/2014 0 0 361 22503.91 0 0
7/21/2014 0 0 3050 119407.24 3050 119407.24
7/21/2014 0 0 448 27735.26 0 0
7/21/2014 288 17139.08 0 0 0 0
7/21/2014 0 0 20 704.00 0 0
7/21/2014 0 0 3 0 0 0
这是我在此提交的第一个问题,所以我希望我已经提交了足够(但不是太多)的信息。我会感谢您提供的任何帮助/建议。 感谢名单!!!
答案 0 :(得分:0)
代替
CASE WHEN saletype_code = 'INT' THEN
SUM(invcitem_billed)
END AS web_qty,
做
sum(
CASE
WHEN saletype_code = 'INT' THEN invcitem_billed
END
) AS web_qty,