2017-05-15 3 views
1

Meine Frage:SQL Comma Separated Values ​​mit COALESCE

DECLARE @Groups VARCHAR(MAX) 

SELECT 
    @Groups = COALESCE(@Groups + ',', '') + CONVERT(VARCHAR(5), GroupID) 
FROM 
    [dbo].[tblGroups] 

PRINT @Groups 

Das gibt

  2345,6543,7854 

ich die @Groups wollen '2345' zurück, '6543', '7854', da muss ich verwenden @Groups in einer anderen Abfrage:

SELECT * 
FROM MyTable 
WHERE GROUP_ID IN (@Groups) 

ich erhalte eine Fehlermeldung:

Msg 245, Level 16, State 1, Line 25
Conversion failed when converting the varchar value '2345,6543,7854' to data type int.

Derzeit teste ich die zweite Abfrage in SQL Server und diesen Fehler, aber eigentlich habe ich die zweite Abfrage in teradata und die Abfrage 1 Ergebnisse @Groups von SQL Server ausführen müssen bestanden) werden. Ich denke, wenn ich @Groups als '2345', '6543', '7854' zurückgeben kann, sollte es mein Problem lösen.

Bitte leiten, wie diese

+0

Das wird wahrscheinlich sowieso nicht funktionieren. Wäre es nicht besser, eine Unterabfrage zu erstellen, um die Daten aus tbGoups – Simon

Antwort

1

Vielleicht zu erreichen, anstatt eine Tabelle Variable verwenden?

DECLARE @Groups TABLE (Groups VARCHAR(MAX)) 
INSERT INTO @Groups 
SELECT CONVERT(VARCHAR(5),GroupID) 
FROM [dbo].[tblGroups] 

SELECT * FROM MyTable 
WHERE GROUP_ID IN (SELECT * 
        FROM @Groups) 

*********************** EDIT ***************** ******

DECLARE @Groups VARCHAR(MAX) 
SELECT 
    @Groups = COALESCE(@Groups + ',', '''') + CONVERT(VARCHAR(15), GroupID) + '''' 
FROM 
    [dbo].[tblGroups] 

PRINT @Groups 

**** EDIT ****

DECLARE @Tab TABLE (GroupID INT) 
INSERT INTO @Tab 
VALUES (2345),(6543),(7854) 
DECLARE @Groups VARCHAR(MAX) 
SELECT 
    @Groups = COALESCE(@Groups + ',', '') +''''+ CONVERT(VARCHAR(5), GroupID) + '''' 
FROM @Tab 
SELECT @Groups 

Ergebnisse:

'2345','6543','7854' 
+0

abzurufen, die nicht die gleiche Logik wie OP geschrieben, da sie lediglich die Zeilen in tblGroups in Ihrer Tabelle Variable dupliziert anstatt einen nicht unterstützten Trick für Strings verketten mit Aggregation . Und noch wichtiger, warum? Wie @Simon vorschlägt, ist der bessere Ansatz, direkt eine Unterabfrage (oder Join) durchzuführen - keine Duplizierung erforderlich. – SMor

+0

Verwenden von Logik, die funktioniert> Verwenden von nicht unterstützten Trick ... IMO ... Es war das schnellste Schreiben und das erste, was mir in den Sinn kam, als ich sah OP versuchte, eine Variable zu verwenden. Simon hat diesen Kommentar gemacht, bevor ich meine Antwort gepostet habe. Ich werde diese Antwort für ihn hinterlassen. – BJones

+0

Das Problem ist, dass diese Abfrage 1 in SQL Server ist und Abfrage 2 in Teradata sein wird. @Groups wird als Variable über einen Prozess an Teradata übergeben. Daher kann keine Unterabfrage oder Tabellenvariable verwendet werden. – SilverFish

Verwandte Themen