2012-09-15 29 views
11
 
Customer Table 
-------------- 
ID Name 
1 James 
2 Peter 
 
Order Table 
--------------- 
OrderId CustId 
100  1 
101  1 
102  2 

¿Cómo puedo escribir una consulta que devuelve algo como estoValores separados por comas en una columna - SQL SERVER

 
ID,Name,ListofOrders 
1,James,"100,101" 
2,Peter,"102" 

En Sybase que tenía una función llamada LISTA que podría utilizar pero no encuentra una función similar en SQL SERVER

+1

[Aquí] (http://bradsruminations.blogspot.com/2009/10/making-list-and-checking -it-twice.html) puede encontrar la solución compleja junto con la explicación. – WojtusJ

+0

Wow es una solución compleja :) Sybase fue mucho mejor con su función LIST. se pregunta por qué SQL Server no tiene esta simple cosa – JanetOhara

Respuesta

12

Inténtelo:

select ID, [Name], 
(select OrderID+',' from OrderTable where CustID=ID 
group by OrderID for xml path('')) AS ListOfOrders 
From CustomerTable 
+0

Gracias Techdo – JanetOhara

1

crear una función definida por el usuario como se muestra a continuación

CREATE FUNCTION [dbo].[CommaSeperatedOrderIDs](@CustId INT) returns varchar(Max) 
AS 
BEGIN 

DECLARE @CommaSeperatedValues VARCHAR(MAX) 
SELECT @CommaSeperatedValues = COALESCE(@CommaSeperatedValues+',' , '') + OrderID 
FROM OrderTable WHERE CustId = @CustId 
RETURN @CommaSeperatedValues 

END 

Y luego,

select ID, [Name], ([dbo].[CommaSeperatedOrderIDs](ID)) AS ListofOrders 
From CustomerTable 
0

Añadiendo detalles completos de Sheikh Haris 'link.

Dada esta tabla:

enter image description here

Para obtener una salida como:

enter image description here

uso el siguiente código SQL:

SELECT field1, 
    Substring(convert(varchar(100), 
    (
    SELECT (', ' + field2) 
     FROM #test t2 
     WHERE t1.field1 = t2.field1 
     ORDER BY field1, field2 
    FOR XML PATH('') 
        )), 3, 1000) 
FROM #test t1 
GROUP BY field1 

Agregué una función de conversión a la subcadena para que se muestre el campo WIDEMEMO (SQL Server)

Cuestiones relacionadas