今天大脑全部融化,如果这么简单可笑,那就道歉了。
基本上我有一个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年为下一列提取。
我希望这是有道理的
答案 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