2017-06-22 1 views
1

ceci est une version mssql:mysql: sélectionner plusieurs valeurs de ligne au format séparés par des virgules utilisant COALESCE

PROCEDURE [dbo].[GetBranchIds] 
    @WebsiteId INT, 
    @BranchIds VARCHAR(1000) OUTPUT 
AS 
BEGIN 
    SELECT @BranchIds = COALESCE(@BranchIds + ',', '') + CAST(BranchId AS VARCHAR) 
    FROM Dealer WITH (NOLOCK) 
    WHERE WebsiteId = @WebsiteId 
END 

table Dealer a colonne suivante: BRANCHID, websiteid. Dans la variable de sortie de ce SP, nous obtenons la branche ids comme: 1265,1265,1265,5,5,5

Je suis en train de convertir cela mysql, j'ai essayé:

PROCEDURE `GetBranchIds`(
v_WebsiteId int, 
out BranchIds varchar(1000)) 
BEGIN 
    set @BranchIds := null; 

    select @BranchIds := (CONCAT(COALESCE(CONCAT(BranchIds,','), ''),BranchId)) 
    from dealer 
    where websiteid = v_WebsiteId; 
END 

Mais j'obtenir une sortie dans différentes rangées, soit 1265 au 1er rang, 1265 au 2e rang et ainsi de suite. Je veux la sortie dans le format séparé par virgule comme 1265,1265,1265,5,5,5. Qu'est-ce que je fais mal dans la version mysql ici?

+0

Je pense que vous devriez utiliser la fonction group_concat() –

Répondre

1

Essayez d'utiliser GROUP_CONCAT():

select group_concat(BranchId) INTO @BranchIds 
from dealer where websiteid = v_WebsiteId;