Question

I have a query

select 
     [I].[name_Text] as [Name] 
        from 
      [dbo].[payments$] [G]
    inner join
        [dbo].[payment$] [H]
    on 
        [H].payments_Id = [G].payments_Id
    inner join
        [dbo].[Payment] [I]
    on 
        [I].[payment_Id] = [H].payment_Id
    WHERE 
        [G].restaurant_Id = 0 and [I].[lang] = 'en'

and i got output as

Name
-----------------
American Express
EuroCard / MasterCard
VISA
VISA Electron

i need an output like American Express, EuroCard / MasterCard, VISA, VISA Electron

I try this query

DECLARE @Names VARCHAR(Max)  
SELECT @Names = COALESCE([A].[Name] + ' ','') 
        FROM  
            (select [I].[name_Text] as [Name] from [dbo].[payments$] [G]
        inner join
            [dbo].[payment$] [H]
        on 
            [H].payments_Id = [G].payments_Id
        inner join
            [dbo].[Payment] [I]
        on 
            [I].[payment_Id] = [H].payment_Id
        WHERE 
            [G].restaurant_Id = 0 and [I].[lang] = 'en') A
SELECT @Names as [name]

but i got out put as

name
----------
VISA Electron 

any other way to do this

Was it helpful?

Solution

That way of group concatenating is actually unsupported and its behaviour can be undeterministic. Anyway, you need to use:

DECLARE @Names VARCHAR(Max) = ''
SELECT @Names = @Names + COALESCE([A].[Name] + ' ','') 
        FROM  
            (select [I].[name_Text] as [Name] from [dbo].[payments$] [G]
        inner join
            [dbo].[payment$] [H]
        on 
            [H].payments_Id = [G].payments_Id
        inner join
            [dbo].[Payment] [I]
        on 
            [I].[payment_Id] = [H].payment_Id
        WHERE 
            [G].restaurant_Id = 0 and [I].[lang] = 'en') A
SELECT @Names as [name]
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top