Tengo una tabla con números de teléfono. En lugar de escupir una sola fila para cada número, quiero devolver una lista de números de teléfono separados por comas. ¿Cuál es la forma más fácil de hacer esto en sql? ¿Un ciclo while?Imprime una lista separada por comas en T-SQL
Respuesta
This question tiene muchas buenas opciones. De hecho, me he referido a la misma pregunta e implementado una o más de esas respuestas.
Here es otro conjunto de buenas opciones.
Ver mi respuesta de este question. Hay otras maneras de hacerlo enumeradas en esa pregunta también. COALESCE o para xml path deberían hacer el truco sin embargo.
Editar (añadió mi respuesta a la pregunta anterior):
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
Se puede crear una UDF que hacer algo como esto
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
Básicamente esto sólo tira de todos los valores en una lista simple.
Algunas de esas respuestas son demasiado complicadas con consultas XML más complejas y más complejas. Lo uso todo el tiempo:
select @Phones=(
Select PhoneColumn+','
From TableName
For XML Path(''))
-- Remove trailing comma if necessary
select @Phones=left(@Phones,len(@Phones)-1)
FWIW Creé una función SQL CLR Aggregate. Funciona como un campeón!
[Serializable] [ SqlUserDefinedAggregate (Format.UserDefined, name = "", JoinStrings IsInvariantToNulls = true, IsInvariantToDuplicates = false, IsInvariantToOrder = false, MaxByteSize = 8000)] public struct JoinStrings: IBinarySerialize { secuencia pública Resultado;
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()); } }
puedo entonces utilizar de esta manera:
SELECT dbo.JoinStrings(Phone) FROM Phones Where UserID = XXX
Asumiendo que tiene una tabla de clientes que tiene un identificador único y otra tabla llamada PHONENUMBERS con varios números de teléfono para cada reparto de la clientela el campo ID de cliente como clave externa esto funcionaría usando una sub-consulta correlacionada
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
Espero que esto es lo que está buscando y no sé si esto lo ayudará hasta ahora después de la pregunta.
- 1. ¿Creando una lista separada por comas?
- 2. Lista separada por comas en SQL
- 3. Lua - convertir una tabla en una lista separada por comas
- 4. ¿Cómo imprimir una lista separada por comas con aldea?
- 5. ¿Cómo harías una cadena separada por comas de una lista?
- 6. número de adjunto a una lista separada por comas
- 7. Rieles: visualización @cars como una lista separada por comas
- 8. MySQL resultados como una lista separada por comas
- 9. Generar matriz desde una lista separada por comas - PHP
- 10. Cómo contar artículos en lista separada por comas de MySQL
- 11. DB2 salida separada por comas
- 12. ¿Cómo dividir una cadena separada por comas?
- 13. Lista separada por comas de elementos de matriz
- 14. ¿Cómo convierto una cadena separada por comas en una matriz?
- 15. cadena separada por comas a la matriz
- 16. ¿Eliminar duplicados en una lista separada por comas con una expresión regular?
- 17. Conversión de una lista <int> en una cadena separada por comas
- 18. Convierte una colección IList <int> en una lista separada por comas
- 19. ¿Cómo crear una lista separada por comas de una matriz en PHP?
- 20. String array como una cadena separada por comas en XAML
- 21. Búsqueda de MySQL valores en una cadena separada por comas
- 22. Convertir flotador para cadena separada por comas
- 23. PHP: matriz separada con comas
- 24. En C#: Añadir comillas alrededor de cadena en una lista separada por comas de cadenas
- 25. Cadena separada por comas a NSArray en Objective-C
- 26. Cómo crear una lista <T> a partir de una cadena separada por comas?
- 27. ¿Hay una expresión regular para una lista separada por comas de valores discretos?
- 28. Eliminar valores en una lista separada por comas de la base de datos
- 29. ¿Cuál es la forma más rápida de revertir una lista separada por comas en vim?
- 30. ¿Cómo puedo convertir cadena separada por comas en una lista <int>
posible duplicado de [¿Hay alguna manera de crear una función de SQL Server para "unir" varias filas de una subconsulta en un único campo delimitado?] (Http://stackoverflow.com/questions/6899/is-there- a-way-to-create-a-sql-server-function-to-join-multiple-rows-from-a-sub) –
La idea básica de esta pregunta se ha formulado varias veces. Eche un vistazo a los enlaces proporcionados en las respuestas a continuación. – TKTS
@TKTS - No me sorprendería si este es el duplicado más desenfrenado en SO. Parece que se pregunta al menos una vez al día, a veces con más frecuencia. –