我有一个表架构
CREATE TABLE `charge` ( `charge_id` int(11) NOT NULL AUTO_INCREMENT, `selling_date` date DEFAULT NULL, `amount` decimal(10,2) DEFAULT NULL, `is_deleted` tinyint(1) NOT NULL DEFAULT '0', `charge_type_id` int(11) DEFAULT NULL, PRIMARY KEY (`charge_id`) );
CREATE TABLE `charge_type` ( `charge_type_id` int(11) NOT NULL AUTO_INCREMENT, `charge_type` varchar(20) NOT NULL, `is_deleted` tinyint(1) DEFAULT '0', PRIMARY KEY (`charge_type_id`) );
CREATE TABLE `charge_type_tax_list` ( `tax_type_id` int(11) NOT NULL, `charge_type_id` int(11) NOT NULL, PRIMARY KEY (`tax_type_id`,`charge_type_id`) );
CREATE TABLE `tax_type` ( `tax_type_id` int(11) NOT NULL AUTO_INCREMENT, `tax_type` varchar(35) NOT NULL, `percentage` decimal(5,4) NOT NULL DEFAULT '0.0000', `is_deleted` tinyint(1) DEFAULT '0', PRIMARY KEY (`tax_type_id`) );
INSERT INTO charge ( `selling_date`, `amount`, `is_deleted`, `charge_type_id` ) VALUES ("2013-12-01", 50, 0, 1), ("2013-12-01", 20, 0, 2), ("2013-12-02", 40, 0, 1), ("2013-12-02", 30, 0, 3), ("2013-12-02", 30, 1, 1), ("2013-12-03", 10, 0, 1);
INSERT INTO charge_type ( `charge_type_id`, `charge_type`, `is_deleted` ) VALUES (1, "room charge", 0), (2, "snack charge", 0), (3, "deleted charge", 1);
INSERT INTO charge_type_tax_list ( `tax_type_id`, `charge_type_id` ) VALUES (1, 1), (2, 1), (3, 1), (1, 2), (1, 3);
INSERT INTO tax_type ( `tax_type_id`, `tax_type` , `percentage`, `is_deleted` ) VALUES (1, "GST", 0.05, 0), (2, "HRT", 0.04, 0), (3, "DELETED TAX", 0.10, 1);
我希望您生成一个列出所有费用和税收总计的查询 使用给定的架构,您的查询应该生成:
Selling Date Charge Type Amount Tax 2013-12-01 Room Charge 50.00 4.50 2013-12-01 Snack Charge 20.00 1.00 2013-12-02 Room Charge 40.00 3.60 2013-12-03 Room Charge 10.00 0.90
不显示已删除的费用(is_deleted已标记) 不显示具有已删除的charge_types的费用(is_deleted已标记) 不要考虑被删除的tax_type(is_deleted),但仍应显示包含的charge_type)
请帮助我,我迫切需要它。谢谢
答案 0 :(得分:0)
请阅读MySQL Join Made Easy以了解如何使用联接。这是一个查询,它应该通过连接公共属性上的表来提供您想要的结果。
SELECT A.`selling_date` AS `Selling Date`, B.`charge_type` AS `Charge Type`
, A.`amount` AS `Amount`, (A.`amount` * D.`percentage`) AS `Tax` FROM
`charge` A LEFT JOIN
`charge_type` B ON A.`charge_type_id`=B.`charge_type_id` INNER JOIN
`charge_type_tax_list` C ON B.`charge_type_id`=C.`charge_type_id`
INNER JOIN `tax_type` D ON C.`tax_type_id`=D.`tax_type_id`
WHERE
A.`is_deleted`=0 AND B.`is_deleted`=0 AND
D.`is_deleted`=0;
答案 1 :(得分:0)
下面的这个查询会得到你想要的结果
select charge.selling_date as SellingDate,
charge.amount as Amount,
charge_type.charge_type as ChargeType,
sum(charge.amount * tax_type.percentage) as Tax
From charge
inner join charge_type on charge.charge_type_id=charge_type.charge_type_id,
tax_type
where charge.is_deleted=0 and charge_type.is_deleted=0 and tax_type.is_deleted=0
group by charge.selling_date, charge.amount,charge_type.charge_type