0

我有一个无法回答的问题。

找出 5 月和 6 月之间发票数量和发票产品总数的差异。

一种方法是使用子查询:一个用于六月,另一个用于五月,然后将两个查询的结果相减。由于两个子查询中的每一个都将返回一行,因此您可以(应该)使用CROSS JOIN,它不需要“on”子句,因为您将一个表(即子查询)中的“所有”行连接到另一个表中的所有行一。要查找某个日期的月份,可以使用MONTH函数。

这是欧文文件

在此处输入图像描述

这是我到目前为止得到的。我不知道在这种情况下如何使用 CROSS JOIN

select COUNT(*) TotalInv, SUM(ILP.ProductCount) TotalInvoicedProducts
from Invoice I, (select Count(distinct ProductId) ProductCount from InvoiceLine) AS ILP 
where MONTH(inv_date) = 5

select COUNT(*) TotalInv, SUM(ILP.ProductCount) TotalInvoicedProducts
from Invoice I, (select Count(distinct ProductId) ProductCount from InvoiceLine) AS ILP 
where MONTH(inv_date) = 6

如果你们能帮忙就太好了。

谢谢

4

2 回答 2

1

问题陈述建议您使用以下步骤:

  • 构造一个查询,用一个结果行给出六月的值。
  • 构造一个查询,用一个结果行给出 May 的值。
  • 比较两个查询的结果。

问题是,在 SQL 中,执行第三步并不容易。一种方法是进行交叉连接,这会产生一行包含来自两个子查询的所有值;然后很容易使用它SELECT (b - a) ...来获得您正在寻找的差异。这不是进行第三步的唯一方法,但你所拥有的绝对行不通。

于 2013-11-29T20:46:55.603 回答
0

你不能用子查询做点什么吗?我没有对此进行测试,但类似下面的内容应该为您提供 5 月和 6 月的 4 列、发票和产品。

select (

select 'stuff' a, count(*) as june_invoices, sum(products) as products from invoices 
where month = 'june' 
 ) june , (

select 'stuff' a, count(*) as may_invoices, sum(products) as products from invoices 
where month = 'may' 
) may

where june.a = may.a
于 2013-11-29T20:46:49.667 回答