2014-05-14 45 views
0
select G.region as Region 
    ,A.Name as AgencyName 
    ,A.AgencyId 
    ,sum(L.LoanAmount) as LoanAmount 
from dw.FFLoan L 
inner join dw.dimborrower B on L.BorrowerId = B.BorrowerId 
inner join dw.DIMGeography G on G.GeographyId = B.GeographyId 
inner join dw.DIMAgency A on A.AgencyId = L.Agency 
group by G.region, A.Name, A.AgencyId 
order by Region, LoanAmount desc 

查询我不能够像 得到输出首先我想先向东5 5,然后向北和向南,然后再向西。 我需要输出仅5各顶贷款金额我坚持我有没有能够得到合适的输出

的区域谢谢

+0

请提供期望我们给合适的解决方案 – samar

+0

使用窗函数(ROW_NUMBER)CTE样本输入数据和输出。我正在尝试一些东西。 – AK47

+0

你给写4个相同的查询 – Luv

回答

0

试试这个,

;With CTE as 
(
select G.region as Region 
     ,A.Name as AgencyName 
     ,A.AgencyId 
     , sum(L.LoanAmount) as LoanAmount 
     ,Row_Number() over (Partition By G.region order by sum(L.LoanAmount) desc) as RNo 
     from dw.FFLoan L 

    inner join dw.dimborrower B on L.BorrowerId = B.BorrowerId 
    inner join dw.DIMGeography G on G.GeographyId = B.GeographyId 
    inner join dw.DIMAgency A on A.AgencyId = L.Agency 
    group by G.region, A.Name, A.AgencyId 


) 
Select * from CTE 
where RNo <=5 
order by LoanAmount desc 
+0

请尝试编辑后,列名更正。 – AK47

+0

thanx帮助...它的工作,但我也想设置贷款金额降序 – rb004

+0

现在请尝试,如果答案是正确的,请标记为有用。 – AK47

1

您可以使用窗口函数row_number()做到这一点。这可以通过另一列(比如sum(LoanAmount))对组内的行(比如区域)进行排序。您可以使用窗口函数与聚合函数,所以查询的样子:

select region, AgencyName, AgencyId, LoanAmount 
from (select g.region, a.Name as AgencyName, a.AgencyId, sum(l.LoanAmount) as LoanAmount, 
      Row_Number() over (Partition By G.region order by sum(l.LoanAmount) desc) as seqnum 
     from dw.FFLoan l inner join 
      dw.dimborrower b 
      on l.BorrowerId = b.BorrowerId inner join 
      dw.DIMGeography g 
      on G.GeographyId = b.GeographyId inner join 
      dw.DIMAgency A 
      on a.AgencyId = l.Agency 
     group by g.region, a.Name, a.AgencyId 
    ) t 
where seqnum = 1 
order by region, LoanAmount desc; 
+0

thanx帮助我 – rb004