NorthWind 数据库:select Orders.OrderDate,Customers.CompanyName as Customer,
[Order Details].UnitPrice* [Order Details].Quantity as SalesAmount,[Order Details].Quantity from Orders 
inner join [Order Details]
on Orders.OrderID=[Order Details].OrderID 
left join Customers 
on Orders.CustomerID=Customers.CustomerID我想写一个连续环比的表, 客户的月销售额的环比曲线。
请高手帮助, 谢谢!

解决方案 »

  1.   


    这用不着动态,例如你可以查询一个结果集如下格式:客户 ------ 日期 -------- 增长
     A -------- 201001 -------- 10
     B -------- 201001 -------- 34
     A -------- 201002 -------- 20
     B -------- 201002 -------- 16
     A -------- 201003 -------- 24这样可以直接查询出相邻月份的环比增长!
      

  2.   

    --建立视图或cte
    create view v_Customer
    as
    select Orders.OrderDate,Customers.CompanyName as Customer,
    [Order Details].UnitPrice* [Order Details].Quantity as SalesAmount,[Order Details].Quantity from Orders  
    inner join [Order Details]
    on Orders.OrderID=[Order Details].OrderID  
    left join Customers  
    on Orders.CustomerID=Customers.CustomerIDgo
    /*
    with v_Customer as 
    (
    select Orders.OrderDate,Customers.CompanyName as Customer,
    [Order Details].UnitPrice* [Order Details].Quantity as SalesAmount,[Order Details].Quantity from Orders  
    inner join [Order Details]
    on Orders.OrderID=[Order Details].OrderID  
    left join Customers 

    */---利用视图或cte查询
    select ta.*,
           ta.SalesAmount*1.0/tb.SalesAmount as [环比SalesAmount],
           ta.Quantity*1.0/tb.Quantity as [Quantity]
    from 
    (select convert(varchar(7),OrderDate,120) as OrderDate,
           max(OrderDate) as OrderDate1,
           Customer,
           sum(SalesAmount) as SalesAmount,sum(Quantity) as Quantity
    from v_Customer
    group by convert(varchar(7),OrderDate,120),Customer) as ta
    left join
    (select convert(varchar(7),OrderDate,120) as OrderDate,
           max(OrderDate) as OrderDate1,
           Customer,
           sum(SalesAmount) as SalesAmount,sum(Quantity) as Quantity
    from v_Customer
    group by convert(varchar(7),OrderDate,120),Customer) as tb
    on datediff(mm,tb.OrderDate1,ta.OrderDate1)=1
    and ta.Customer=tb.Customer