【发布时间】:2015-04-23 20:11:49
【问题描述】:
我需要修复以下 SQL 查询:
SELECT sep.name AS company_name,
atnp.name AS employee_name,
(Case WHEN ip.id_item = 0001 THEN 'Product A'
ELSE 'Product B'
END ) AS product_name,
(Case WHEN ivcp.id_item = 0001 THEN SUM(ivcp.quantity)
ELSE NULL
END ) AS quantityA,
(Case WHEN ivcp.id_item = 0002 THEN SUM(ivcp.quantity)
ELSE NULL
END ) AS quantityB
FROM sale_item AS ivcp
INNER JOIN stock AS mep ON (mep.id_stock = ivcp.id_stock)
INNER JOIN sale AS vcp ON (vcp.id_sale = ivcp.id_sale)
INNER JOIN terminal_sale AS mvtp ON (mvtp.id_terminal_sale = vcp.id_terminal_sale)
INNER JOIN item AS ip ON (ivcp.id_item = ip.id_item)
INNER JOIN item_category AS cip ON (ip.id_category_item = cip.id_category_item)
LEFT OUTER JOIN employee AS atnp ON (atnp.id_employee = ivcp.id_employee)
INNER JOIN sis_company AS sep ON (sep.id_company = mvtp.id_company)
WHERE mvtp.id_company IN (1)
AND mvtp.date_sale BETWEEN :BeginDate AND :EndDate
AND DATE(ivcp.date_sale) BETWEEN :BeginDate AND :EndDate
AND DATE(vcp.data_rec) BETWEEN :BeginDate AND :EndDate
AND mep.date_sale BETWEEN :BeginDate AND :EndDate
AND (-1 = -1 OR ivcp.id_employee IN
(SELECT id_employee FROM team_employee WHERE id_employee = -1))
AND ip.id_category_item = 100
AND ivcp.id_item IN (0002,0001)
AND (ivcp.cancel = 'N' AND vcp.cancel = 'N')
GROUP BY sep.name,
atnp.name,
ip.id_item,
ivcp.id_item
ORDER BY sep.name
结果:
COMPANY | EMPLOYEE | PRODUCT NAME | QUANTITY A | QUANTITY B
Company A | Employee A | Product A | 1.64 | NULL
Company A | Employee A | Product B | NULL | 4.70
Company A | Employee B | Product A | 84.191 | NULL
Company A | Employee B | Product B | NULL | 91.885
但我想要这个:
COMPANY | EMPLOYEE | QUANTITY A | QUANTITY B
Company A | Employee A | 1.64 | 4.70
Company A | Employee B | 84.191 | 91.885
此查询目标是将某些员工的销售额排序到畅销书排名中。排名将按“产品 A”和“产品 B”销售额排序(ivcp.quantity、id_item = 0001 和 id_item = 0002)。
内连接用于匹配销售日期、商品类别、员工 ID、库存等。
我正在使用基于 Stimulsoft 的程序来设计报告布局,但我不太习惯。因此,如果可以在查询中解决问题,那就太好了!
【问题讨论】:
-
-1是否在实际查询中应该作为参数的地方弹出 3?或者它是你认为的常数?另外,始终,请提供您的 Postgres 版本。 -
-1 用于报告表单中的可选字段。如果客户端没有为此字段选择任何选项,则查询将显示所有结果。当您说这只是噪音时,您是对的,任何问题都可以将其删除。谢谢。 Edit: Postgres 版本:9.3
标签: sql postgresql aggregate aggregate-filter