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 所以,正確的格式將是
- 1110,10,1,... 201553(一週ID )
- 1110,0,0,... 201552(一週ID)
- 1110,0,0,... 201552(一週ID)
- 1110,0,0,... 201551(周id)
- 1110,0,0,... 201550(week id)
- 1110,0,0,... 201549(一週ID)
- 1110,0,0,... 201548(一週ID)
- 1110,1000,23,... 201547(weekId)
缺少的行應爲0
好吧,我重新安排查詢,但有一個問題,不能NULL值插入PlayerId – user2171512
這個答案是一個開始。您還需要一個isnull()函數來爲每個要默認爲零的字段。 –
@ user2171512。 。 。在創建臨時表時,將數字列的默認值設置爲零。這可能是最簡單的解決方案。 –