Sql server 如何查询表中来自2个日期范围的数据

Sql server 如何查询表中来自2个日期范围的数据,sql-server,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)

我想比较两个不同日期范围的数据。我希望数据显示在同一个数据集中,具有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
我想从两个不同的日期范围运行查询,然后将Item Count sales cost和margin的列添加到结果集中,并将它们添加到相应的部分。我尝试了一个子查询,但是这会将所有数据添加到一起,然后将该数据应用到所有行

谢谢。

试试这个:

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;
我遗漏了一些专栏,但你明白了。

试试这个:

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;

我漏掉了一些列,但你明白了。

请发布你想要的结果。结果将包含以下列:名称、SectionID、ItemCount1、Sales1、Cost1、Margin1、ItemCount2、Sales2、Cost2、Margin2。带1的列将来自第一个日期范围,带2的列将来自第二个日期范围。请发布您想要的结果。结果将包含以下列:名称、SectionID、ItemCount1、Sales1、Cost1、Margin1、ItemCount2、Sales2、Cost2、Margin2。带1的列将来自第一个日期范围,带2的列将来自第二个日期范围