2017-04-02 168 views
0

我正在创建一个POS数据图。我创建MySQL子查询

SELECT DATE_FORMAT(DATE_ADD(DATE(receipts.datenew - INTERVAL (5*60 + 30) MINUTE), INTERVAL (5*60 + 30) MINUTE), '%Y-%m-%d') AS interval_start, 
CONVERT(EXTRACTVALUE(PRODUCTS.ATTRIBUTES, '/properties//entry[@key=\"maincat\"]') USING UTF8) AS MAINCAT, 
ROUND(SUM(TICKETLINES.PRICE * TICKETLINES.UNITS), -3) AS DAYSALES 
FROM TICKETLINES, TICKETS, RECEIPTS, PRODUCTS 
WHERE TICKETLINES.PRODUCT = PRODUCTS.ID 
AND TICKETLINES.TICKET = TICKETS.ID 
AND TICKETS.ID = RECEIPTS.ID 
AND TICKETLINES.PRODUCT IS NOT NULL 
AND (receipts.datenew >= DATE_SUB(NOW(), INTERVAL 3 MONTH) AND receipts.person > 0) 
GROUP BY DATE(receipts.datenew - INTERVAL (5*60 + 30) MINUTE), MAINCAT 
ORDER BY interval_start, MAINCAT 

我也得到了以下数据:

interval_start MAINCAT DAYSALES 
2016-12-31 Drink 45108000 
2016-12-31 Food 49791000 
2016-12-31 Other 109000 
2017-01-01 Drink 14226000 
2017-01-01 Food 27425000 
2017-01-01 Other 36000 
2017-01-02 Drink 20400000 
2017-01-02 Food 25648000 
2017-01-02 Other 109000 

但我需要这种格式:

interval_start Drink  Food 
2016-12-31 45108000 36000 
2016-12-31 49791000 20400000 
2016-12-31 109000  25648000 
2017-01-01 27425000 109000 
2017-01-01 14226000 49791000 

我相信一个子查询的答案,但我不能图出来。

在此先感谢。

艾伦

+0

我不明白你如何到达在预期的产出。我想你应该包括一个解释。 –

+0

我认为他希望得到枢轴的结果 – Cherif

+0

谢谢你的回复,我应该更清楚。我正在试图创建一个图表,并且供应商声明要生成折线图,数据需要具有这些列。 TICKETLINES表包含销售项目的价格,销售日期在RECEIPTS中。我的目标是获得每种销售物品每天的销售数据。 虽然我可能会做这个完全错误的。 –

回答

0

我已经能够获得与下面的查询的正确格式的数据 - 谢谢你的指点我朝着正确的方向:

SELECT DATE_FORMAT(DATE_ADD(DATE(receipts.datenew - INTERVAL (5*60 + 30) MINUTE), INTERVAL (5*60 + 30) MINUTE), '%Y-%m-%d') AS DATEofSALES, 
SUM(CASE WHEN CONVERT(EXTRACTVALUE(PRODUCTS.ATTRIBUTES, '/properties//entry[@key=\"maincat\"]') USING UTF8) = 'Drink' THEN ticketlines.price ELSE 0 END) DRINKSALES, 
SUM(CASE WHEN CONVERT(EXTRACTVALUE(PRODUCTS.ATTRIBUTES, '/properties//entry[@key=\"maincat\"]') USING UTF8) = 'Food' THEN ticketlines.price ELSE 0 END) FOODSALES, 
SUM(CASE WHEN CONVERT(EXTRACTVALUE(PRODUCTS.ATTRIBUTES, '/properties//entry[@key=\"maincat\"]') USING UTF8) = 'Other' THEN ticketlines.price ELSE 0 END) OTHERSALES 
FROM TICKETLINES, TICKETS, RECEIPTS, PRODUCTS 
WHERE TICKETLINES.PRODUCT = PRODUCTS.ID 
AND TICKETLINES.TICKET = TICKETS.ID 
AND TICKETS.ID = RECEIPTS.ID 
AND TICKETLINES.PRODUCT IS NOT NULL 
AND (receipts.datenew >= {ts '2017-02-01 06:00:00.000'} AND receipts.datenew < {ts '2017-03-31 14:28:00.000'} AND receipts.person > 0) 
GROUP BY DATE(receipts.datenew - INTERVAL (5*60 + 30) MINUTE) ORDER BY DATEofSALES