如何查询表中的2个日期范围的数据

时间:2016-11-16 20:01:15

标签: sql-server

我想比较两个不同日期范围的数据。我希望数据显示在同一数据集中,其中包含来自daterange1和daterange2的不同列。这就是我现在所拥有的:

SELECT l1.Name, t1.SectionID, 
SUM(SectionItems) AS ItemCount, 
SUM(SectionSales) AS Sales, 
SUM(SectionCost) AS Cost, 
(((SUM(SectionSales) - SUM(SectionCost))/ SUM(SectionSales)) * 100) AS Margin
FROM StoreSectionSales t1
JOIN Sections l1 ON l1.SectionID = t1.SectionID AND l1.StoreID = t1.StoreID
WHERE TimeID <= (SELECT TimeID FROM Time WHERE FactDate = '11/15/2015') 
    AND TimeID <= (SELECT TimeID FROM Time WHERE FactDate = '11/15/2016') 
    AND t1.StoreID <> 08
GROUP BY t1.SectionID, l1.Name
ORDER BY t1.SectionID

以下是结果:

Name      SectionID ItemCount   Sales   Cost    Margin
section1    1         1         100       1     100
section2    2         2         100       1     100

我想从2个不同的日期范围运行查询,然后将项目计数销售成本和保证金的列添加到结果集,并将它们添加到相应的部分。我尝试了一个子查询,但是这会将所有数据一起添加到所有行中。

感谢。

1 个答案:

答案 0 :(得分:0)

试试这个:

select time1.name, time1.sectionID, 
time1.ItemCount as ItemCount1, time1.Sales as Sales1, 
time2.ItemCount as ItemCount2, time2.Sales as Sales2
from
(SELECT l1.Name, t1.SectionID, 
    SUM(SectionItems) AS ItemCount, 
    SUM(SectionSales) AS Sales, 
    SUM(SectionCost) AS Cost, 
    (((SUM(SectionSales) - SUM(SectionCost))/ SUM(SectionSales)) * 100) AS Margin
    FROM StoreSectionSales t1
    inner join Sections l1 ON l1.SectionID = t1.SectionID AND l1.StoreID = t1.StoreID
    WHERE TimeID <= (SELECT TimeID FROM Time WHERE FactDate = '11/15/2015') 
    AND t1.StoreID <> 08
GROUP BY t1.SectionID, l1.Name) time1
inner join 
(SELECT l1.Name, t1.SectionID, 
    SUM(SectionItems) AS ItemCount, 
    SUM(SectionSales) AS Sales, 
    SUM(SectionCost) AS Cost, 
    (((SUM(SectionSales) - SUM(SectionCost))/ SUM(SectionSales)) * 100) AS Margin
    FROM StoreSectionSales t1
    inner join Sections l1 ON l1.SectionID = t1.SectionID AND l1.StoreID = t1.StoreID
    WHERE TimeID <= (SELECT TimeID FROM Time WHERE FactDate = '11/15/2016') 
        AND t1.StoreID <> 08
    GROUP BY t1.SectionID, l1.Name) time2 on time1.name = time2.name
order by time1.sectionID;

我遗漏了一些专栏,但你明白了。