我需要从订单列表中生成帐单。
我有一个查询,我得到所有尚未支付的订单(paid_date = null),但问题是某些订单有不同的税码。现在,我只能在该查询中将订单与相同的税码组合在一起。
我正在考虑下面的内容,但这显然不起作用:
SELECT * from orders
WHERE paid_date IS NULL AND tax_code = MAX(tax_code);
几乎像一个反特色。
更新:
对不起,我想问题不明确。我不是在寻找税码。我正在寻找所有具有相同税码的订单清单。但我不关心它是哪个代码。这实际上只是一种安全措施,通常所有税码都是相同的,但在极少数情况下它们是不同的。在这种情况下,用户需要生成2个单独的账单。
任何简单的想法?
答案 0 :(得分:2)
您需要确定除税码之外的其他列,例如,也许是customer_ID(例如);
获取当前客户的tax_codes列表:
SELECT customer_ID, tax_code
FROM Orders
WHERE customer_ID = 'some customer ID'
GROUP BY customer_ID, tax_code
上面的查询将返回不同行的数量,因此如果有2个tax_codes; 然后你得到2行,需要生成2个账单;
然后你可以像其他人一样查询:
SELECT * FROM Orders
WHERE paid_date IS NULL
AND tax_code = 'first tax code from your first query'
这将涉及到DB的多次访问。或者,您可以编写存储过程,使用临时表,并返回多个集合(多个SELECT语句),每个集合包含tax_code的表格列表。
或者,如果您使用的是SQL(不了解MySQL),您可以编写SQL XML查询,该查询将通过customer_id和tax_code返回分层数据。
这有帮助吗?
答案 1 :(得分:1)
坚持原始查询,子查询会这样做:
SELECT * from orders
WHERE paid_date IS NULL
AND tax_code = (
select max(tax_code)
from orders
where paid_date is null
)
答案 2 :(得分:0)
您应该按tax_code
订购并获取tax_code
订购的订单列表:
select * from orders
where paid_date is null
order by tax_code
然后迭代你的结果。只要您有一个明确的tax_code
生成新帐单。
group_concat
可能会给你你想要的东西:
select tax_code, group_concat(order_id order by order_id) from orders
where paid_date is null
group by tax_code
-- optionally you can use a LIMIT 1 if you just want orders for the first tax_code
答案 3 :(得分:0)
在此示例中,我从订单列表中随意选择了tax_code,因为您没有向我们提供有关如何选择所选tax_code的详细信息。
Select ..
From Orders As O
Join (
Select O1.tax_code
From Orders As O1
Limit 1
) As Z
On Z.tax_code = O.tax_code
Where paid_date Is Null
这里的问题是子查询可能会发现tax_code只与一个订单相关联,因为绝大多数订单与另一个tax_code相关联。另一种找到“最常见”税码的解决方案是:
Select ..
From Orders As O
Join (
Select O1.tax_code
From Orders As O1
Group By O1.tax_code
Order By Count(*) Desc
Limit 1
) As Z
On Z.tax_code = O.tax_code
Where paid_date Is Null