2017-05-29 29 views
0

我有以下腳本,試圖計算有多少不同的客戶在那裏,有多少個不同的訂單,15英鎊以下的所有訂單的總數以及它的平均值, 20,它是平均值。腳本幫助 - 計數,總計和平均值

with consignments as 
(select 
[Sell-to Customer No_], 
[Convert-to Document No_], 
ic.[Shipping Agent Service Code], 
[Pick Completed DateTime] as [Shipped DateTime], 
ROUND((ic.[Amount Including VAT] + ic.Postage + ic.[Gift Wrap Price] + 
ic.[Handling Fee] + ic.[Personalisation Fee]),2) as [Document Amount] 
from dbo.[Temp$Consignment] ic inner join [dbo]. 
[Temp$Order] oh 
on ic.[Owner Header GuID]=oh.[Order Guid]  
where ic.[Shipping Agent Service Code]='secstan' and ic.[Pick Completed 
DateTime] >= '2016-11-01T00:00:00.000' AND 
ic.[Pick Completed DateTime] <= '2016-11-30T23:59:55.000'),summary as 
(select *,CASE WHEN [Document Amount] > 15 THEN 1 ELSE 0 END as 'Over15' 
from consignments)select * from summary 

我有像下面的工作腳本,但因爲我是新來的sql我有點困惑如何將上面的腳本轉換爲下面。

select amountclass,[Shipping Agent Service Code], 
    count(distinct [Sell-to Customer No_]) as Total_customers, 
    count(*) as Total_orders, 
    sum([Amount]) as total_revenue, 
    avg([Amount] * 1.0) as AOV 
    from 
    (
    select [Sell-to Customer No_], oh.[Original Order No_], [Amount],ic. 
    [Shipping Agent Service Code], 
     case when [Amount] <= 20 then 'Under_20' 
      else 'Over_20' 
     end as amountclass 
from [TBW_BI].[dbo].[Temp$Order] oh INNER JOIN [TBW_BI].[dbo]. 
    [Temp$Consignment] IC 
ON IC.[Owner Header GuID]=OH.[Order Guid] 
where[order date] >= '2016-09-01' AND 
    [order date] <= '2016-09-30' AND [COUNTRY]='UNITED KINGDOM' and 
[document type] like 'ord%' and ic.[Shipping Agent Service 
Code]='secstan' 
) dt 

group by amountclass,[Shipping Agent Service Code] 
    order by amountclass,[Shipping Agent Service Code] 

回答

0

它看起來像你有一個2公用表表達式(CTE)的查詢,你想將CTE轉換爲派生表。首先,我們可以淘汰其中一個CTE。

summary as 
(select *,CASE WHEN [Document Amount] > 15 THEN 1 ELSE 0 END as 'Over15' 
from consignments) 

select * from summary 

CTE for summary是不必要的。我們可以在代碼轉換爲這樣的:

select *,CASE WHEN [Document Amount] > 15 THEN 1 ELSE 0 END as 'Over15' 
from consignments 

現在,而是採用了貨物CTE;我們可以複製其中的sql代碼來創建派生表。

select *,CASE WHEN [Document Amount] > 15 THEN 1 ELSE 0 END as 'Over15' 
from (
    select [Sell-to Customer No_], 
      [Convert-to Document No_], 
      ic.[Shipping Agent Service Code], 
      [Pick Completed DateTime] as [Shipped DateTime], 
      ROUND((ic.[Amount Including VAT] + ic.Postage + ic.[Gift Wrap Price] + 
      ic.[Handling Fee] + ic.[Personalisation Fee]),2) as [Document Amount] 
    from dbo.[Temp$Consignment] ic 
      inner join [dbo].[Temp$Order] oh on ic.[Owner Header GuID]=oh.[Order Guid]  
    where ic.[Shipping Agent Service Code]='secstan' 
      and ic.[Pick Completed 
      DateTime] >= '2016-11-01T00:00:00.000' 
      AND 
     ic.[Pick Completed DateTime] <= '2016-11-30T23:59:55.000') as t