2016-01-20 35 views
1

我想制作一个报告系统,我需要为每个日期显示报告 。显示关于特定日期的数据?

enter image description here

这些是selected_items enter image description here 我的表架构这是stock_list enter image description here

我在前端,后端和java使用PHP来显示 数据。我尝试了几个查询来获得所需的输出,但是我远远得不到它。这些是我使用的一些查询。

SELECT 
    COALESCE(stock_list.date, selected_items.date) AS date, 
    SUM(stock_list.qty) AS StockSum, 
    SUM(stock_list.weight) AS Stockweight, 
    COUNT(selected_items.barcode) AS BilledItems, 
    SUM(selected_items.weight) AS Billedweight 
FROM stock_list join selected_items 
ON stock_list.date = selected_items.date 
GROUP BY COALESCE(stock_list.date, selected_items.date) 
ORDER BY COALESCE(stock_list.date, selected_items.date); 

这给了我第一个五列,但输出给了我错误的价值观。 然后我也试过联盟。

SELECT SUM(qty) AS StockSum, SUM(weight) AS Stockweight 
FROM `stock_list` 
WHERE DATE LIKE '08-Jan-2016' 
UNION SELECT COUNT(barcode) AS BilledItems, SUM(weight) AS Billedweight 
FROM `selected_items` 
WHERE DATE LIKE '08-Jan-2016' 
UNION SELECT SUM(qty) AS TotalStock, SUM(weight) AS TotalWeight 
FROM `stock_list`; 

在这里我得到了正确的值四列,但问题是>结果显示在两列的时候,我想它是在4列。 任何人都可以引导我,我已经认为它的Java部分,但我不擅长PHP和MySQL。 谢谢

+0

谢谢@LordAnomander你能帮助解决方案吗 – AndroidNewBee

+0

你会共享表格模式吗? – AnkiiG

+0

是啊@AnkiiG请检查更新的问题。谢谢 – AndroidNewBee

回答

0

不幸的是,SQL小提琴应声而我试图执行这个查询

SELECT sl.date AS date, B.qtySum AS StockSum, B.weightSum AS Stockweight, 
C.barcodeCount AS BilledItems, C.weightSum AS Billedweight 
FROM stock_list sl 
JOIN (SELECT SUM(qty) as qtySum, SUM(weight) as weightSum 
     FROM STOCK_LIST GROUP BY date) AS B 
ON B.date = sl.date 
JOIN (SELECT SUM (weight) AS weightSum, COUNT(barcode) AS barcodeCount 
     FROM SELECTED_ITEMS GROUP BY date) AS C 
ON C.date = sl.date; 

As it was tried here。联接的问题是行将被多次连接,因此总和会出错。例如,您有四行从第二个表中连接起来,因此总和应该高四倍。通过子查询,您可以避免这个问题,因为您在加入变量之前对变量进行计数和加总,因此数字应该适合。唉,我无法运行查询,所以我不能100%确定它的工作原理,但它应该是正确的方法。