Transformando varias linhas em uma linha s贸
Roberto Vale
Posted on December 7, 2020
CREATE DATABASE DB
GO
USE DB
GO
DROP TABLE IF EXISTS PESSOA
GO
CREATE TABLE PESSOA
(
COD_PESSOA INT IDENTITY PRIMARY KEY,
NOME_PESSOA VARCHAR(50),
SOBRENOME_PESSOA VARCHAR(50)
)
GO
INSERT PESSOA
VALUES ('HUGUINHO','PATO'), ('ZEZINHO','PATO'), ('LUIZINHO','PATO')
GO
CREATE TABLE TELEFONE
(
COD_TELEFONE INT IDENTITY PRIMARY KEY,
NUMERO_TELEFONE VARCHAR(25),
TIPO_TELEFONE VARCHAR(10),
COD_PESSOA INT REFERENCES PESSOA
)
GO
INSERT TELEFONE
VALUES ('1234-5678','FIXO',1), ('999999999','CELULAR',1), ('333666999','CELULAR',2), ('222444666','CELULAR',2)
GO
--NOME DE TODAS AS PESSOAS
-- SOMENTE TELEFONE CELULAR
--VAI EXISTIR NOME DUPLICADO NA LISTA
SELECT
*
FROM PESSOA P left JOIN TELEFONE T
ON P.COD_PESSOA = T.COD_PESSOA
and T.TIPO_TELEFONE = 'CELULAR'
GO
---------Exemplo antigo
SELECT
P.*,
cel1.NUMERO_TELEFONE1,
cel2.NUMERO_TELEFONE2,
FIXO1.NUMERO_TELEFONE3
FROM
PESSOA P
left join
(select
COD_PESSOA,
max(NUMERO_TELEFONE) NUMERO_TELEFONE1
from
TELEFONE T
where T.TIPO_TELEFONE = 'CELULAR'
group by COD_PESSOA)cel1
on
p.COD_PESSOA = cel1.COD_PESSOA
left join
(select
COD_PESSOA,
min(NUMERO_TELEFONE) NUMERO_TELEFONE2
from
TELEFONE T
where T.TIPO_TELEFONE = 'CELULAR'
group by COD_PESSOA)cel2
on
p.COD_PESSOA = cel2.COD_PESSOA
left join
(select
COD_PESSOA,
min(NUMERO_TELEFONE) NUMERO_TELEFONE3
from
TELEFONE T
where T.TIPO_TELEFONE = 'FIXO'
group by COD_PESSOA)FIXO1
on
p.COD_PESSOA = FIXO1.COD_PESSOA
--exemplo novo
select
*
FROM PESSOA P
cross apply
(SELECT
t.NUMERO_TELEFONE + ','
FROM TELEFONE t
where TIPO_TELEFONE = 'CELULAR'
and P.COD_PESSOA = t.COD_PESSOA
FOR XML path ('')) resultado/Nome da tabela/ (NUMERO_TELEFONE/Nome do campo/)
Posted on December 7, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 23, 2024