CONCATENAR 2 OU 3 REGISTROS NUMA VARIAVEL

WMR2018 11/07/2023 10:15:21
#501573
Bom dia Galera,

Possuo os seguinte código:
SELECT DISTINCT pedidos.COD_PEDIDO, (CASE WHEN TbNFCe.NFCeEnviada = 1 THEN 'SIM' ELSE '' END) AS Var_StatusNFCE, (CASE WHEN TbNFCe.Inutilizada = 1 THEN 'SIM' ELSE '' END) AS Var_NFCEInutilizada
FROM pedidos INNER JOIN cliente ON pedidos.COD_CLIENTE = cliente.CODIGO LEFT OUTER JOIN TbNFCe ON TbNFCe.Num_OS_VD_Origem = pedidos.COD_PEDIDO


Exibindo no grid todos os meus pedidos e se for ou não emitido NFCe (tabela: TbNFCe).... tudo funcionando

Preciso exibir em uma celular no grid todas as formas de pagamentos daquele pedido... tem pedido como somente uma forma de pagamento (exemplo: Dinheiro) e existe pedidos com até 3 formas de pagamento (Dinheiro, Pix e Cartão)...

Então preciso mostrar numa das celulas do grid isso... a forma de pagamento e ser for mais de uma, ele mostrar separado com virgula.

A tabela que possui as parcelas e a forma de pagamento é essa:
SELECT COD_PEDIDO, FORMA_PGTO FROM parcelas


Tenho que relaciona pelo COD_PEDIDO e concatenar a FORMA_PGTO caso haja mais de um registro
WEBMASTER 11/07/2023 13:46:50
#501574
Resposta escolhida
Alterado em 11/07/2023 13:49:24 Putz, eu usei muito isso em Oracle no passado.
Veja se isso te ajuda:

  
SELECT city, GROUP_CONCAT (name) as "NAMES"
FROM employee group by city;


E pegando distintos (caso tenha repetições)
  
SELECT city, GROUP_CONCAT (DISTINCT name) as "UNIQUE NAMES"
FROM employee group by city;


Ah, lembrei !!!
È algo assim (SQL SERVER)


SELECT DISTINCT
SUBSTRING(
STUFF((
SELECT DISTINCT ',' + [FieldB]
FROM tablename
ORDER BY 1
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
, 1, 0, '')
, 2, 9999)
FROM tablename


Dá uma conferida aqui, o operador que eu estava tentando lembrar o nome é o listagg

https://stackoverflow.com/questions/15477743/listagg-in-sqlserver
WMR2018 11/07/2023 16:21:29
#501576
Boa tarde, Estou tentando primeiro concatenar os dados

Não deu certo desse jeito que me passou assim, fiz umas modificações e ficou assim:

SELECT DISTINCT SUBSTRING((SELECT ', ' + parc.FORMA_PGTO AS [text()] FROM parcelas parc where cod_pedido = 29965 
FOR XML PATH ('')), 2, 8000) AS texto FROM parcelas


Porem apresente o seguinte erro ao executar:
Erro na cláusula WHERE próxima a '('.
Não é possível analisar o texto da consulta.


Após dar um OK na msg de erro, ele me mostra os dados concatenado correto....

Alguem sabe me explicar porque está dando esse erro?
WMR2018 11/07/2023 23:42:42
#501577
Conseguir resolver!
...
SUBSTRING((SELECT ', ' + P.FORMA_PGTO FROM dbo.parcelas P WHERE P.COD_PEDIDO = pedidos.COD_PEDIDO FOR XML PATH ('')), 2, 1000) var_Pagamento
...


obg, Webmaster
Tópico encerrado , respostas não são mais permitidas