2016-11-21 4 views
-1

Wie kann ich 2 Felder verketten, aber ich habe auch CASE-Bedingung. Hier ist meine sql:Verketten Sie zwei Felder mit Fallbedingung

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] 

Aber diese Abfrage ist falsch, und ich weiß nicht, wie zu verketten, wenn ich CASE Zustand. Irgendwelche Hilfe oder Anregung?

+1

Geben Sie Daten an, die Sie haben, und erwartetes Ergebnis – Mansoor

Antwort

2

Sie können keine Alias-Namen in der Klausel group by verwenden. Ich habe es wie folgt geändert. Wenn Sie die obigen Versionen von SQL Server 2008 verwenden, verwenden Sie die Funktion concat. Bei einer Verkettung von zwei Strings ergeben sich einige Male 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

Danke, das hat mein Problem gelöst. – user2171512

0

Machen Sie die case und Verkettung in einer abgeleiteten Tabelle. Group by sein Ergebnis.

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

Ein Problem mit Ihrer Anfrage ist die as in der Mitte des Ausdrucks - und die Verwendung von Alias-Namen mit Perioden in ihnen. Vielleicht ist dies Ihr Problem löst:

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]; 

Dies setzt voraus, dass Sie die „blind“ Namen in eine einzige Zeile kombinieren wollen.