Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 比较查询_Sql - Fatal编程技术网

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的总和(数量*每个)。我将如何修改此查询?