我需要从订单列表中生成账单。
我有一个查询,其中我得到了所有尚未支付的订单(paid_date = null),但问题是一些订单具有不同的税号。现在,我只能在该查询中组合具有相同税号的订单。
我正在考虑类似下面这样的事情,但这显然不起作用:
SELECT * from orders
WHERE paid_date IS NULL AND tax_code = MAX(tax_code);几乎就像一个反Distinct。
更新:
对不起,我想问题不是很清楚。我不是在找税号。我在找一份税号都一样的订单清单。但我并不关心它是哪种代码。这实际上只是一种安全措施,通常所有的税号都是相同的,但在极少数情况下它们是不同的。在这种情况下,用户需要生成2个单独的账单。
有什么简单的想法吗?
发布于 2011-01-27 03:06:07
您将需要标识除税码之外的另一个一致的列,例如,可能是customer_ID (例如);
获取当前客户的tax_codes列表:
SELECT customer_ID, tax_code
FROM Orders
WHERE customer_ID = 'some customer ID'
GROUP BY customer_ID, tax_code上面的查询将返回distinct行数,因此如果有2个tax_codes,那么您将得到2行,并且需要生成2个账单;
然后,您可以像其他人所显示的那样进行查询:
SELECT * FROM Orders
WHERE paid_date IS NULL
AND tax_code = 'first tax code from your first query'这将涉及到多次访问数据库。或者,您可以编写一个存储过程,利用临时表,并返回多个集合(多个SELECT语句),每个集合包含一个按tax_code排序的表格列表。
或者,如果您正在使用SQL (不了解MySQL),则可以编写SQL XML query,它将通过customer_id和tax_code返回分层数据。
这有帮助吗?
发布于 2011-01-27 02:53:19
坚持使用原始查询,子查询将执行此操作:
SELECT * from orders
WHERE paid_date IS NULL
AND tax_code = (
select max(tax_code)
from orders
where paid_date is null
)发布于 2011-01-27 02:36:19
您应该按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_codehttps://stackoverflow.com/questions/4808423
复制相似问题