来自同一个表的多列结果

时间:2015-03-09 13:57:26

标签: sql sql-server

今天大脑全部融化,如果这么简单可笑,那就道歉了。

基本上我有一个Sales表,其中列出了销售价值,客户ID,日历年和月份以及分支ID等。

我需要一个查询,列出2011年的前100名销售额和2012年的销售额

我有2011年 - 容易(见下文)

select top 100 
    C.Name as [Customer],
    SUM (S.SalesTotal) as [Sales for the Year 2011]
from 
    Sales S
Left Join 
    CustomerName C with (NOLOCK) on C.CustomerID = S.CustomerID
where 
    S.Year = '2011' and S.BranchID = 10
Group By 
    C.Name  

但我需要在2011年销售额的另一栏中引入2012年的销售额。在表格中的年份列中,它们仅根据年份进行标记,因此它将在2012年为下一列提取。

我希望这是有道理的

2 个答案:

答案 0 :(得分:2)

一种方法是在总和中使用CASE语句:

select top 100 
C.Name as [Customer],
SUM (CASE WHEN S.Year='2011' THEN S.SalesTotal ELSE 0) as [Sales for the Year 2011]
SUM (CASE WHEN S.Year='2012' THEN S.SalesTotal ELSE 0) as [Sales for the Year 2012]
SUM (CASE WHEN S.Year='2013' THEN S.SalesTotal ELSE 0) as [Sales for the Year 2013]
from Sales S
Left Join CustomerName C with (NOLOCK) on C.CustomerID=S.CustomerID
where S.BranchID=10
Group By C.Name  

答案 1 :(得分:0)

您需要更改过滤器以包含2012,并使用案例陈述作为总和:

 select top 100 
    C.Name as [Customer],
    SUM (case when year '2011' then S.SalesTotal else 0 end) as [Sales for the Year 2011],
SUM (case when year '2012' then S.SalesTotal else 0 end) as [Sales for the Year 2012]
    from Sales S
    Left Join CustomerName C with (NOLOCK) on C.CustomerID=S.CustomerID
    where S.Year in ('2011','2012' and S.BranchID=10
    Group By C.Name