我在mysql中查看(vwbalance
),我使用它来检查商店中产品的当前库存余额,它在一个产品上工作得很好。 下面是两个表trn_inventory
我们存储所有库存交易(产品进来和产品走出去)和mst_product
我们存储产品的细节视图在mysql视图中计算每个产品的运行余额
CREATE VIEW vwbalance AS
SELECT
a.`id` AS `Trans No`,
a.`tdate` AS Siku,
a.`section` AS `Section`,
`g`.`p_name` AS `Product`,
a.`cr` AS `In`,
a.`dr` AS `Out`,
SUM((o.`cr` - o.`dr`)) AS `balance`,
a.`status` AS `status`
FROM ((`trn_inventory` a
LEFT JOIN `mst_product` `g`
ON ((`g`.`p_id` = a.`p_id`)))
JOIN `trn_inventory` o
ON (((a.`tdate` > o.`tdate`)
OR ((a.`tdate` = o.`tdate`)
AND (a.`id` >= o.`id`)))))
WHERE (o.`status` = 'APPROVED')
GROUP BY a.`tdate` DESC,a.`id` DESC;
上述观点得到数据。我们在创造这种观点的主要理由是基本上显示正在运行的平衡,因为表trn_inventory犯规存储余额,下面是表定义
CREATE TABLE trn_inventory (
id INT(25) NOT NULL AUTO_INCREMENT,
tdate DATE NOT NULL,
p_id INT(25) NOT NULL,
dr INT(5) DEFAULT '0' COMMENT 'OUT',
cr INT(5) DEFAULT '0' COMMENT 'IN',
cost DOUBLE(13,2) NOT NULL DEFAULT '0.00',
section VARCHAR(95) DEFAULT NULL,
ref VARCHAR(95) DEFAULT NULL,
trans_user VARCHAR(35) NOT NULL,
`status` ENUM('PENDING','APPROVED','DISPATCHED','VOID') NOT NULL DEFAULT 'PENDING',
approvedby VARCHAR(35) DEFAULT NULL,
dispatchedby VARCHAR(35) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=latin1;
这里是输出当我运行SELECT * FROM vwbalance;
:
Trans Siku Section Product In Out Bal Status
-------------------------------------------------------------------
8 2014-02-05 "Store" "Treated SEEDS" 0 10 68 "APPROVED"
7 2014-02-05 "Store" "Treated SEEDS" 50 0 78 "APPROVED"
5 2014-02-04 "Store" "Dry Seeds" 40 0 28 "APPROVED"
3 2014-01-16 "Store" "Dry Seeds" 0 2 -12 "APPROVED"
4 2014-01-15 "Store" "Dry Seeds" 0 15 -10 "APPROVED"
2 2014-01-15 "Store" "Dry Seeds" 10 0 5 "VOID"
1 2014-01-15 "store" "Dry Seeds" 12 0 5 "APPROVED"
6 2014-01-14 "Store" "Dry Seeds" 0 7 -7 "APPROVED"
我想让它显示每个产品的平衡:
Trans Siku Section Product In Out Bal Status
-------------------------------------------------------------------
8 2014-02-05 "Store" "Treated SEEDS" 0 10 40 "APPROVED"
7 2014-02-05 "Store" "Treated SEEDS" 50 0 50 "APPROVED"
5 2014-02-04 "Store" "Dry Seeds" 40 0 28 "APPROVED"
3 2014-01-16 "Store" "Dry Seeds" 0 2 -12 "APPROVED"
4 2014-01-15 "Store" "Dry Seeds" 0 15 -10 "APPROVED"
2 2014-01-15 "Store" "Dry Seeds" 10 0 5 "VOID"
1 2014-01-15 "store" "Dry Seeds" 12 0 5 "APPROVED"
6 2014-01-14 "Store" "Dry Seeds" 0 7 -7 "APPROVED"
我已经修改分组,
...
...
WHERE (o.`status` = 'APPROVED')
GROUP BY a.`tdate` DESC,a.`id` DESC,o.p_id;
但它返回两行下面的第二个产品是输出
Trans Siku Section Product In Out Bal Status
-------------------------------------------------------------------
8 2014-02-05 "Store" "Treated SEEDS" 0 10 28 "APPROVED"
8 2014-02-05 "Store" "Treated SEEDS" 0 10 40 "APPROVED"
7 2014-02-05 "Store" "Treated SEEDS" 50 0 28 "APPROVED"
7 2014-02-05 "Store" "Treated SEEDS" 50 0 50 "APPROVED"
5 2014-02-04 "Store" "Dry Seeds" 40 0 28 "APPROVED"
3 2014-01-16 "Store" "Dry Seeds" 0 2 -12 "APPROVED"
4 2014-01-15 "Store" "Dry Seeds" 0 15 -10 "APPROVED"
2 2014-01-15 "Store" "Dry Seeds" 10 0 5 "VOID"
1 2014-01-15 "store" "Dry Seeds" 12 0 5 "APPROVED"
6 2014-01-14 "Store" "Dry Seeds" 0 7 -7 "APPROVED"
我要去哪里错了?
我已经创建了一个SQLFiddle在那里你可以得到这个模式有样本数据,您可以测试查询
你选择和a.'tdate'加入,但按a.'date'? – LauriK
我已更正了错字 – indago
纠正后结果是否改变? – LauriK