J'ai une table avec des numéros de téléphone. Au lieu de cracher une seule ligne pour chaque numéro, je veux retourner une liste de numéros de téléphone séparés par des virgules. Quel est le moyen le plus simple de le faire en SQL? Une boucle while?Sortie d'une liste séparée par des virgules dans T-SQL
Répondre
This question a plusieurs bonnes options. J'ai effectivement fait référence à la même question et mis en œuvre une ou plusieurs de ces réponses.
Here est un autre ensemble de bonnes options.
Voir ma réponse de question. Il y a deux autres façons de le faire énumérées dans cette question également. COALESCE ou pour le chemin XML devrait faire l'affaire cependant.
Modifier (ajouté ma réponse de la question précédente):
CREATE FUNCTION [dbo].[fn_MyFunction]()RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @str NVARCHAR(MAX)
DECLARE @Delimiter CHAR(2)
SET @Delimiter = ', '
SELECT @str = COALESCE(@str + @Delimiter,'') + AColumn
FROM dbo.myTable
RETURN RTRIM(LTRIM(@str))
END
Vous pouvez créer une UDF qui ferait quelque chose comme ça
CREATE FUNCTION dbo.GetBirthdays(@UserId INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @combined VARCHAR(MAX)
SELECT @combined = COALESCE(@combined + ', ' + colName + ', colName)
FROM YourTable
WHERE UserId = @UserId
ORDER BY ColName
END
En gros, cela tire juste toutes les valeurs dans une liste simple.
Certaines de ces réponses sont trop compliquées avec des requêtes XML complexes et complexes. Je l'utilise tout le temps:
select @Phones=(
Select PhoneColumn+','
From TableName
For XML Path(''))
-- Remove trailing comma if necessary
select @Phones=left(@Phones,len(@Phones)-1)
FWIW J'ai créé une fonction SQL CLR Aggregate. Fonctionne comme un champion!
[Serializable] [ SqlUserDefinedAggregate (Format.UserDefined, Name = "JoinStrings", IsInvariantToNulls = true, IsInvariantToDuplicates = faux, IsInvariantToOrder = false, MaxByteSize = 8000)] public struct JoinStrings: IBinarySerialize { public string Résultat;
public void Init() { Result = ""; } public void Accumulate(SqlString value) { if (value.IsNull) return; Result += value.Value + ","; } public void Merge(JoinStrings Group) { Result += Group.Result; } public SqlString Terminate() { return new SqlString(Result.ToString().Trim(new
char [] {','})); }
public void Read(System.IO.BinaryReader r) { Result = r.ReadString(); } public void Write(System.IO.BinaryWriter w) { w.Write(Result.ToString()); } }
Je peux alors l'utiliser comme ceci:
SELECT dbo.JoinStrings(Phone) FROM Phones Where UserID = XXX
En supposant que vous avez une table de clients qui a un identifiant unique et une autre table nommée PHONENUMBERS avec plusieurs numéros de téléphone pour chaque partage de la clientèle le champ ID client en tant que clé étrangère cela fonctionnerait en utilisant une sous-requête corrélée
Select C.ID, C.FirstName, C.LastName,
(select (STUFF((SELECT ', ' + PhoneNumber from PhoneNumbers P where P.CID = C.ID
FOR XML PATH('')), 1, 2, ''))) as PhoneNumbers
from Customers C
Select Unique ID, Replace(Rtrim(Ltrim(Case when [Phone_Number1] is not null Then [Phone_Number1]+' ' Else '' End +
Case when [Phone_Number2] is not null Then [Phone_Number2]+' ' Else '' End +
Case when [Phone_Number3] is not null Then [Phone_Number3]+' ' Else '' End)),' ',', ') as Phone_numbers
From MYTable
Espérons que c'est ce que vous cherchez et je ne sais pas si cela vous aidera si loin après la question.
- 1. Liste séparée par des virgules
- 2. Liste séparée par des virgules
- 3. liste séparée par des virgules dans php
- 4. Liste séparée par des virgules dans SQL
- 5. Impression séparée par des virgules()
- 6. TSQL PATINDEX Recherche de la valeur exacte dans une liste séparée par des virgules
- 7. Liste séparée par des virgules dans un SQL SELECT Résultats
- 8. Liste séparée par des virgules dans la colonne utilisant linq
- 9. Parsing une liste séparée des points-virgules
- 10. Rails: affichage @cars comme une liste séparée par des virgules
- 11. XSLT pour diviser la liste XML séparée par des virgules
- 12. Requête Linq sélection d'une liste séparée par des virgules
- 13. nombre Append à une liste séparée par des virgules
- 14. conversion d'une chaîne séparée par des virgules en une liste
- 15. Razor, valeurs de sortie de la liste séparée par des virgules
- 16. Séparation des virgules TSQL
- 17. TSQL Sélectionner la liste des virgules dans les rangées
- 18. Liste en chaîne séparées par des virgules
- 19. Liste des fichiers séparés par des virgules à virgules
- 20. Valeurs de case à cocher jQuery dans une liste séparée par des virgules
- 21. Conversion de liste dans une liste séparée par des virgules avec linq?
- 22. Supprimer des valeurs dans une liste séparée par des virgules de la base de données
- 23. Colonne calculée - Séparée par des virgules après la vérification NULL
- 24. sortie d'impression en 1 ligne séparés par des virgules
- 25. Sortie séparée par une virgule DB2
- 26. Prendre une liste séparée par des virgules et créer une liste non ordonnée
- 27. Trier la liste séparée par des virgules Par ordre alphabétique PHP
- 28. Liste délimitée par des virgules
- 29. Détermination par programme de la différence entre une liste séparée par des virgules et un paragraphe
- 30. liste Convertir chaîne délimitée par des virgules
duplication possible de [Existe-t-il un moyen de créer une fonction SQL Server pour "joindre" plusieurs lignes d'une sous-requête dans un seul champ délimité?] (Http://stackoverflow.com/questions/6899/is-there- a-way-to-create-a-sql-server-function-to-join-multiple-rows-from-a-sub) –
L'idée de base de cette question a été posée plusieurs fois. Jetez un coup d'œil aux liens fournis dans les réponses ci-dessous. – TKTS
@TKTS - Je ne serais pas surpris si c'est le doublon le plus effréné sur SO. Il semble être demandé au moins une fois par jour, parfois plus souvent. –