Sql 比较查询
我试图编写一个查询来比较两个日期范围的数据 第一个日期范围:Sql 比较查询,sql,Sql,我试图编写一个查询来比较两个日期范围的数据 第一个日期范围: select code,description, quantity*each as Total from orderiteminfo oi, orderinfo o, invoiceinfo i where oi.orderid = o.orderid and o.invoiceid = i.invoiceid and i.invdate between '2014-01-01' and '2014-02-01' group by o
select code,description, quantity*each as Total
from orderiteminfo oi, orderinfo o, invoiceinfo i
where oi.orderid = o.orderid
and o.invoiceid = i.invoiceid
and i.invdate between '2014-01-01' and '2014-02-01'
group by oi.code, description, quantity, each
select code,description, quantity*each as Total
from orderiteminfo oi, orderinfo o, invoiceinfo i
where oi.orderid = o.orderid
and o.invoiceid = i.invoiceid
and i.invdate between '2015-01-01' and '2015-02-01'
group by oi.code, description, quantity, each
第二个日期范围:
select code,description, quantity*each as Total
from orderiteminfo oi, orderinfo o, invoiceinfo i
where oi.orderid = o.orderid
and o.invoiceid = i.invoiceid
and i.invdate between '2014-01-01' and '2014-02-01'
group by oi.code, description, quantity, each
select code,description, quantity*each as Total
from orderiteminfo oi, orderinfo o, invoiceinfo i
where oi.orderid = o.orderid
and o.invoiceid = i.invoiceid
and i.invdate between '2015-01-01' and '2015-02-01'
group by oi.code, description, quantity, each
我希望结果是:
Code | Description | Total for First Date Range | Total for second Date Range如果我理解正确,我认为您可以在单个查询中使用
case当
语句:
select code,
description,
case
when i.invdate between '2014-01-01' and '2014-02-01'
then quantity*each
end Total_for_First_Date_Range,
case
when i.invdate between '2015-01-01' and '2015-02-01'
then quantity*each
end Total_for_Second_Date_Range
from orderiteminfo oi, orderinfo o, invoiceinfo i
where oi.orderid = o.orderid
and o.invoiceid = i.invoiceid
group by oi.code, description, quantity, each; --not sure if you need this
像这样的
SELECT code,
description,
SUM(CASE
WHEN i.invdate BETWEEN '2014-01-01' AND '2014-02-01' THEN quantity * each
END) AS [Total for First Date Range],
SUM(CASE
WHEN i.invdate BETWEEN '2015-01-01' AND '2015-02-01' THEN quantity * each
END) AS [Total for second Date Range]
FROM orderiteminfo oi
INNER JOIN orderinfo o
ON oi.orderid = o.orderid
INNER JOIN invoiceinfo i
ON o.invoiceid = i.invoiceid
WHERE ( i.invdate BETWEEN '2014-01-01' AND '2014-02-01'
OR i.invdate BETWEEN '2015-01-01' AND '2015-02-01' )
GROUP BY oi.code,
description
作为旁注,总是使用
内部连接
语法来连接两个表,而不是老式的逗号分隔连接,并且在Where
子句中单独保留过滤器,这更易于阅读如果我们随着时间的推移添加或删除代码,那么在两个日期范围中也可能没有完全相同的代码。因此,我在我的原始查询我需要显示每个oi.code的总和(数量*每个)。我将如何修改此查询?