2015-12-29 32 views
1

我有一個表#results和我填寫該表有一些價值,但如果我沒有匹配它不填寫該表,直到結束的過去8周填充臨時表中的值

這是我的插入和合並代碼

INSERT INTO #Results (
      [PlayerId], 
      [CalendarWeekID], 
      [TotalDepositAmount], 
      [TotalDepositCount], 
      [TotalWithdrawalAmount], 
      [TotalWithdrawalCount] 
      ) 
     SELECT 
      [PlayerId], 
      [CalendarWeekID], 
      SUM(Aggr.DepositAmount)  [Deposits], 
      SUM(Aggr.DepositCount)  [DepositCount], 
      SUM(Aggr.WithdrawalAmount) [Withdrawals],      
      SUM(Aggr.WithdrawalCount) [WithdrawalCount] 
     FROM [WarehouseMgmt].[FactPaymentAgr] Aggr 
     JOIN WarehouseMgmt.DimTime DT on DT.Id = Aggr.TimeId 
     WHERE (CalendarWeekId BETWEEN @CurrentWeek7 AND @CurrentWeek) AND [PlayerId] = @PlayerID 
     GROUP BY [PlayerId],[CalendarWeekID] 

    MERGE #Results AS Target 
      USING( SELECT 
         [PlayerId], 
         [CalendarWeekID], 
         SUM(Aggr.FinancialBetAmount) [TotalBetAmount], 
         SUM(Aggr.FinancialBetCount) [TotalBetCount] 
        FROM [WarehouseMgmt].[FactWalletAgr] Aggr 
        JOIN [WarehouseMgmt].[DimPlayer] DPL ON Aggr.[PlayerId] = DPL.[Id] 
        JOIN WarehouseMgmt.DimTime DT on DT.Id = Aggr.TimeId 
        WHERE (CalendarWeekId BETWEEN @CurrentWeek7 AND @CurrentWeek) AND [PlayerId] = @PlayerID 
        GROUP BY [PlayerId],[CalendarWeekID]) AS Source 
      ON (Target.[PlayerId] = Source.[PlayerId]) 
      WHEN MATCHED THEN 
       UPDATE SET Target.[TotalBetAmount] = Source.[TotalBetAmount], 
          Target.[TotalBetCount] = Source.[TotalBetCount] ; 

和目前的結果對於一個球員會在這種格式

PlayerId一些數額和計算CalendarWeekId CalendarWeek 1110,10,1,... 201553(一週ID ) 1110,1000,23,... 201547(weekId)

,但我想要的是,這對於在表中的所有過去8點的數據,甚至是0 所以,正確的格式將是

  1. 1110,10,1,... 201553(一週ID )
  2. 1110,0,0,... 201552(一週ID)
  3. 1110,0,0,... 201552(一週ID)
  4. 1110,0,0,... 201551(周id)
  5. 1110,0,0,... 201550(week id)
  6. 1110,0,0,... 201549(一週ID)
  7. 1110,0,0,... 201548(一週ID)
  8. 1110,1000,23,... 201547(weekId)

缺少的行應爲0

回答

0

你只包括一個球員的數據,所以你可以在此使用left join解決。該insert語句應該是這樣的:

INSERT INTO #Results (. . .) 
    SELECT . . . 
    FROM WarehouseMgmt.DimTime DT LEFT JOIN 
     WarehouseMgmt.FactPaymentAgr Aggr 
     ON DT.Id = Aggr.TimeId AND [PlayerId] = @PlayerID 
    WHERE (CalendarWeekId BETWEEN @CurrentWeek7 AND @CurrentWeek) 
    GROUP BY PlayerId, CalendarWeekID 
+0

好吧,我重新安排查詢,但有一個問題,不能NULL值插入PlayerId – user2171512

+0

這個答案是一個開始。您還需要一個isnull()函數來爲每個要默認爲零的字段。 –

+0

@ user2171512。 。 。在創建臨時表時,將數字列的默認值設置爲零。這可能是最簡單的解決方案。 –