2016-07-11 2 views
0

Ich verwende SQL Server und meine Aufgabe besteht darin, eine Liste von Speichern zu kompilieren, für die wir nicht alle 3 Dateien erhalten haben (Datei1, Datei2, Datei3). Mit anderen Worten, jedes Geschäft muss diese Dateien senden. Wenn ein Geschäft keine Datei (en) sendet, muss ich in der Lage sein, diesen Speicher und die bestimmten fehlenden Dateien zu identifizieren.Auswählen von Werten, die in einer SQL-Select-Anweisung nicht zurückgegeben werden

Zum Beispiel

StoreName|StoreID|NumberReceived|Missing Files 
StoreABC 1234 2    File1 
SuperStore 4321 1    File1, File2 

Das ist, was ich bisher haben. Ich bin fest zu versuchen, die fehlenden Dateien erstellen und diese in einer signle Säule durch ein

SELECT 
ds.StoreName, 
StoreID, 
COUNT(DISTINCT FileType) as 'NumberReceived' 
from ETL.CustomerFileExtractLog cfe 
    inner join Final.DimStore ds 
     on cfe.StoreID = ds.NABPNumber 
where Customer ='ComputerRx' 
and TimeStamp >= DATEADD(DAY, -1, GETDATE()) 
Group by StoreName, 
StoreID 
having COUNT(DISTINCT FileType) < 3 
order by StoreName 

Antwort

1

Komma getrennt zu identifizieren STUFF und XML PATH() verwenden wir Komma nur ändern Seperated bekommen können entsprechend Ihre Anforderung angenommen Code

;WITH CTE AS (
    SELECT 
     ds.StoreName, 
     StoreID, 
     FileType 
     FROM fILETYPE t 
     INNER JOIN ETL.CustomerFileExtractLog cfe 
      inner join Final.DimStore ds 
       on cfe.StoreID = ds.NABPNumber 
     where Customer ='ComputerRx' 
     and TimeStamp >= DATEADD(DAY, -1, GETDATE()) 
     Group by StoreName, 
     StoreID 
     having COUNT(DISTINCT FileType) < 3 ) 

Select 
    StoreName, 
    StoreID, 
    COUNT(DISTINCT FileType) as 'NumberReceived', 
    STUFF((SELECT ', ' + CAST(Files AS VARCHAR(50)) FileNAmes 
FROM CTE 
WHERE StoreID = C.StoreID 
FOR XML PATH(''), TYPE) 
.value('.','NVARCHAR(MAX)'),1,2,' ') 
FROM CTE C 
Verwandte Themen