2016-11-30 6 views
2

こんにちは、私はいくつかのジョインで選択し、すべての行を1つのテーブル(右ジョイン)に表示したい。 は、ここに私のクエリいくつかのジョインをテーブルSQL Serverで1つの右ジョインで使用する方法

MERGE #Players AS Target 
       USING (SELECT DT.[TimeId] AS [Selector],        
           [CurrencyId], 
           PT.Name         [ProductType], 
           COUNT(*) FirstTimeDepositors, 
           PT.Id FirstDepositProductTypeId 
         FROM [WarehouseMgmt].[DimPlayer] DP 
         JOIN [WarehouseMgmt].[DimTimeZone] DT ON DP.[FirstDepositTimeId] = DT.TimeUTCId 
         RIGHT JOIN [WarehouseMgmt].[DimProductType] PT ON PT.Id = DP.FirstDepositProductTypeId      
         AND [FirstDepositTimeId] BETWEEN @DimStartDateUTC AND @DimEndDateUTC 
         AND DP.[IsInternalAccount] = 0 
         GROUP BY DT.[TimeId],[CurrencyId],PT.Name,PT.Id) AS Source 
       ON (Target.[Time] = Source.[Selector] AND Target.[CurrencyId] = Source.[CurrencyId] AND Target.[ProductType] = Source.[ProductType]) 
       WHEN MATCHED THEN 
         UPDATE SET Target.[FirstTimeDepositorsCounts] = Source.[FirstTimeDepositors] 
       WHEN NOT MATCHED BY TARGET THEN 
         INSERT ([Time],[CurrencyId],[ProductType],[FirstTimeDepositorsCounts],[FirstDepositProductTypeId]) 
         VALUES (Source.[Selector],Source.[CurrencyId],[ProductType],Source.[FirstTimeDepositors],Source.[FirstDepositProductTypeId]); 

である。しかし、これは私のために正常に動作しない、プラス私はあなたが参加し、テーブルをフィルタリングする場合句は、それは右で可能かどう参加

+0

? – sagi

+0

誰が使用するのかわかりません:)すべてのテーブルを結合し、すべてのProductTypesをDimProductTypeテーブルから取得するソリューションが必要です。あなたが歓迎されているいくつかのより良い解決策を知っている場合:) – user2171512

答えて

1

あなたが追加することができますWHERE持つようにしたいですそれをjoin句に追加するか、サブクエリを使用します。

RIGHT JOIN [WarehouseMgmt].[DimProductType] PT 
    ON PT.Id = DP.FirstDepositProductTypeId And PT.Field = "What you want" 

または `RIGHT JOIN`このごろ使用しています

RIGHT JOIN 
    (Select Fields From [WarehouseMgmt].[DimProductType] Where Field = "What you want") PT 
    ON PT.Id = DP.FirstDepositProductTypeId 
+1

ああ、私はそれを知っていたdoh :) –

関連する問題