USE tempdb;
-- DROP TABLE pessoa_fisica;
CREATE TABLE pessoa_fisica
(
id_pessoa_fisica int IDENTITY (1,1) PRIMARY KEY
, nome varchar(100) NOT NULL
, sexo varchar(1) NOT NULL
);
-- DROP TABLE email;
CREATE TABLE email
(
id_email int IDENTITY (1,1) PRIMARY KEY
, email varchar(100) NOT NULL
, id_pessoa_fisica int NOT NULL REFERENCES pessoa_fisica(id_pessoa_fisica)
);
-- inserindo na tabela pessoa_fisica
INSERT INTO pessoa_fisica (nome, sexo) VALUES ('Maria','F');
INSERT INTO pessoa_fisica (nome, sexo) VALUES ('Ieda','F');
INSERT INTO pessoa_fisica (nome, sexo) VALUES ('Ilma','F');
INSERT INTO pessoa_fisica (nome, sexo) VALUES ('Felipe','F');
-- listando todas as pessoas fisicas cadastradas
SELECT * FROM pessoa_fisica;
-- inserindo na tabela email
-- inserindo emails de Maria
INSERT INTO email (email, id_pessoa_fisica) VALUES ('maria@exemplo.com', 1);
INSERT INTO email (email, id_pessoa_fisica) VALUES ('maria.rosa@exemplo.com', 1);
INSERT INTO email (email, id_pessoa_fisica) VALUES ('maria.silva@exemplo.com', 1);
-- inserindo emails de Ieda
INSERT INTO email (email, id_pessoa_fisica) VALUES ('ieda@exemplo.com', 2);
INSERT INTO email (email, id_pessoa_fisica) VALUES ('ieda.lima@exemplo.com', 2);
-- inserindo emails de Felipe
INSERT INTO email (email, id_pessoa_fisica) VALUES ('felipe@exemplo.com', 4);
INSERT INTO email (email, id_pessoa_fisica) VALUES ('felipe.santos@exemplo.com', 4);
-- listando todos os emails cadastrados
SELECT * FROM email;
-- listando emails de Maria
-- listando emails de Maria em várias linhas
-- exemplo 1.1
SELECT email + '; ' FROM email WHERE id_pessoa_fisica = 1;
-- listando emails de Maria em uma única linha
-- exemplo 1.2
SELECT stuff( (SELECT email + '; ' FROM email WHERE id_pessoa_fisica = 1 FOR XML PATH('')),1,0,'');
-- listando todos os emails cadastrados com todas as pessoas cadastradas,
-- considerando vários emails em uma unica linha.
-- exemplo 2
SELECT pessoa_fisica.nome
, stuff (
(
SELECT email.email + '; '
FROM email
WHERE email.id_pessoa_fisica = pessoa_fisica.id_pessoa_fisica
FOR XML PATH('')
),1,0,''
) AS emails
FROM pessoa_fisica
;
Mais uma vez espero ter ajudado ...
DBA, MySql, Oracle, Postgres, SQL Server, DB2, BI, TI, Business Intelligence, Data Science, Machine Learning, IoT, Arduino
quinta-feira, 1 de agosto de 2013
Converter várias linhas em uma única linha no SQL Server
Como converter várias linhas em uma única linha no SQL Server, separando por ponto e virgula ";".
Assinar:
Comentários (Atom)
