2016-11-16 113 views
1

我想要比较来自2个不同日期范围的数据。我希望将数据显示在来自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 

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

谢谢。

+0

请发布您想要的结果。 – CGritton

+0

结果将包含以下列:名称,SectionID,ItemCount1,Sales1,Cost1,Margin1,ItemCount2,Sales2,Cost2,Margin2。带1的列将来自第一个日期范围,带2的列将来自第二个日期范围 – user3839756

回答

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; 

我离开了某些列,但你的想法。