2016-11-21 5 views
-1

どのように2つのフィールドを連結することができますが、私はまたケース条件を持っています。ここに私のsqlです:ケースの条件で2つのフィールドを連結する

INSERT INTO #TempTable([Name],[TotalBets]) 
SELECT  CASE 
       WHEN @Limited ='All' 
        THEN DPL.[FirstName] 
       WHEN @Limited ='Blind_No'     
        THEN DPL.[FirstName]    
       ELSE '*****' 
       END AS DPL.[FirstName] + ' ' + 
      CASE 
       WHEN @Limited ='All' 
        THEN DPL.[LastName] 
       WHEN @Limited ='Blind_No' 
        AND [BlindAccount] = 1 
        THEN '*****' 
       WHEN @Limited ='Blind_No' 
        AND [BlindAccount] = 0 
        THEN DPL.[LastName] 
       ELSE '*****' 
       END AS DPL.[LastName] [Name], 
     SUM(FWA.TotalBetAmount)      [TotalBets]  
    FROM [WarehouseMgmt].[FactWalletAgr] FWA 
    JOIN [WarehouseMgmt].[DimPlayer] DPL ON FWA.[PlayerId] = DPL.[Id] 
    JOIN [WarehouseMgmt].[DimGame] DG ON FWA.[GameId] = DG.[Id] 
GROUP BY DPL.[FirstName] + ' ' + DPL.[LastName] 

しかし、このクエリは間違っている、と私はCASE条件を持っている場合連結する方法がわかりません。 ご意見やご提案はありますか?

+1

あなたが持っているデータと予想される結果を指定してください – Mansoor

答えて

2

group by句でエイリアス名を使用することはできません。私はそれを以下のように変更しました。上記のバージョンのSQL Server 2008を使用している場合は、concat機能を使用してください。 2つの文字列を連結すると、NULLになることがあります。

INSERT INTO #TempTable([Name],[TotalBets]) 
    SELECT  (CASE 
        WHEN @Limited ='All' 
         THEN DPL.[FirstName] 
        WHEN @Limited ='Blind_No'     
         THEN DPL.[FirstName]    
        ELSE '*****' 
        END) + ' ' + 
       (CASE 
        WHEN @Limited ='All' 
         THEN DPL.[LastName] 
        WHEN @Limited ='Blind_No' 
         AND [BlindAccount] = 1 
         THEN '*****' 
        WHEN @Limited ='Blind_No' 
         AND [BlindAccount] = 0 
         THEN DPL.[LastName] 
        ELSE '*****' 
        END) [Name], 
      SUM(FWA.TotalBetAmount)      [TotalBets]  
     FROM [WarehouseMgmt].[FactWalletAgr] FWA 
     JOIN [WarehouseMgmt].[DimPlayer] DPL ON FWA.[PlayerId] = DPL.[Id] 
     JOIN [WarehouseMgmt].[DimGame] DG ON FWA.[GameId] = DG.[Id] 
    GROUP BY (CASE 
        WHEN @Limited ='All' 
         THEN DPL.[FirstName] 
        WHEN @Limited ='Blind_No'     
         THEN DPL.[FirstName]    
        ELSE '*****' 
        END) + ' ' + 
       (CASE 
        WHEN @Limited ='All' 
         THEN DPL.[LastName] 
        WHEN @Limited ='Blind_No' 
         AND [BlindAccount] = 1 
         THEN '*****' 
        WHEN @Limited ='Blind_No' 
         AND [BlindAccount] = 0 
         THEN DPL.[LastName] 
        ELSE '*****' 
        END) 
+1

ありがとう、これは私の問題を解決しました。 – user2171512

0

派生テーブルでcaseと連結を実行します。 Group byその結果。そしてそれらにピリオドを持つエイリアスの使用 - あなたの検索で

select [Name], sum(TotalBetAmount) as [TotalBets] 
from 
(
SELECT  CASE 
       WHEN @Limited ='All' 
        THEN DPL.[FirstName] 
       WHEN @Limited ='Blind_No'     
        THEN DPL.[FirstName]    
       ELSE '*****' 
       END + ' ' + 
      CASE 
       WHEN @Limited ='All' 
        THEN DPL.[LastName] 
       WHEN @Limited ='Blind_No' 
        AND [BlindAccount] = 1 
        THEN '*****' 
       WHEN @Limited ='Blind_No' 
        AND [BlindAccount] = 0 
        THEN DPL.[LastName] 
       ELSE '*****' 
       END AS [Name], 
      FWA.TotalBetAmount AS TotalBetAmount 
    FROM [WarehouseMgmt].[FactWalletAgr] FWA 
    JOIN [WarehouseMgmt].[DimPlayer] DPL ON FWA.[PlayerId] = DPL.[Id] 
    JOIN [WarehouseMgmt].[DimGame] DG ON FWA.[GameId] = DG.[Id] 
) dt 
GROUP BY [Name] 
0

一つの問題は、式の途中でasです。

INSERT INTO #TempTable([Name],[TotalBets]) 
    SELECT ((CASE WHEN @Limited = 'All' THEN DPL.[FirstName] 
        WHEN @Limited = 'Blind_No' THEN DPL.[FirstName]    
        ELSE '*****' 
       END)+ ' ' + 
       (CASE WHEN @Limited = 'All' THEN DPL.[LastName] 
        WHEN @Limited = 'Blind_No' AND [BlindAccount] = 1 THEN '*****' 
        WHEN @Limited ='Blind_No' AND [BlindAccount] = 0 
        THEN DPL.[LastName] 
       ELSE '*****' 
      END) 
      ) as [Name], 
      SUM(FWA.TotalBetAmount) as [TotalBets]  
    FROM [WarehouseMgmt].[FactWalletAgr] FWA JOIN 
     [WarehouseMgmt].[DimPlayer] DPL 
     ON FWA.[PlayerId] = DPL.[Id] JOIN 
     [WarehouseMgmt].[DimGame] DG 
     ON FWA.[GameId] = DG.[Id] 
    GROUP BY DPL.[FirstName] + ' ' + DPL.[LastName]; 

これはあなたが単一の行に「ブラインド」の名前を組み合わせることにしたくないことを前提としています。おそらくこれはあなたの問題を解決します。

関連する問題