Consulta SQL

Galera, como que eu retorno duas colunas a partir de uma coluna no SQL Server ? Meu problema é o seguinte :
Tenho uma tabela pessoa e nessa tabela pessoa,
eu tenho a coluna de ‘nomepessoa’, nessa coluna eu tenho os nomes de ‘funcionarios e clientes’, depois eu tenho um campo com o tipo de pessoa, clientes = 1 e funcionario = 2.
Eu já fiz o where para pegar os clientes e funcionario, só que eu tenho que exibir eles em outras duas colunas…
Exemplo : Coluna funcionario: ‘apenas funcionarios’ , Coluna clientes : ‘apenas clientes’.

select * from (
select nome as cliente, ' ' as funcionario
from pessoa 
where tipo = 1
union
select ' ' as cliente, nome as funcionario
from pessoa 
where tipo = 2)

Cara, muito obrigado !
Mas seria possível retirar esses espaços ?
Tipo , mostrar o cliente na linha 1 igual está o funcionario ?

duvida

Qual seria a relação para esta união? Certamente vai existir diferenças entre a quantidades dai vai ficar parte de uma das colunas em branco.
Podemos simular um relacionamento pelo nro da linha ex:

select CLIENTES.NOME, FUNCIONARIOS.NOME
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY name ASC) AS LINHA, NOME 
FROM PESSOA
WHERE TIPO = 1) AS CLIENTES
(SELECT ROW_NUMBER() OVER(ORDER BY name ASC) AS LINHA, NOME 
FROM PESSOA
WHERE TIPO = 2) AS FUNCIONARIOS
WHERE CLIENTES.LINHA = FUNCIONARIOS.LINHA

Eu nunca trabalhei com sqlserver mas acho que seria mais ou menos assim.

É o seguinte,eu vou ter que colocar essa consulta dentro de uma outra consulta bem maior… eu estou trabalhando com uma importacao de dados para um sistem novo e
para dar certo, eu preciso retirar as partes em branco.

olha o jeito que está essa parte :

 SELECT RESULTADO.Mae , RESULTADO.Pai  FROM (

SELECT  DISTINCT mae.nomepessoa as Mae,''as Pai FROM  dbo.bpm_pessoa mae 
 INNER JOIN dbo.bpm_pessoarelacionamento maerelacionamento on
  maerelacionamento.idpessoaprincipal = mae.idpessoa where maerelacionamento.idtiporelacionamentopessoa = 3 
UNION
SELECT DISTINCT '' as pai,pai.nomepessoa as pai FROM dbo.bpm_pessoa AS  pai 
INNER JOIN dbo.bpm_pessoarelacionamento pairelacionamento on 
pairelacionamento.idpessoaprincipal = pai.idpessoa where pairelacionamento.idtiporelacionamentopessoa = 2
)
AS RESULTADO

Quando eu falei de ‘funcionarios’ e ‘clientes’ era só um exemplo. para eu conseguir fazer.

D1

Da pra voce criar duas Classes uma funcionario e outra como clientes… dentro dessa classe vc colaca um atriburo (Integer id; por exemplo) e dentro da sua estrutura da captura das pessoas voce separa elas com um fi se o id for 1 seria clientes se for 2 seria funcionarios. separando joga eles numa lista e depois manda setar em uma nova tabela dentro so seu banco de dados ja separando uma tabela de clientes e um de funcionarios… nao sei se consegui ajudar… mas se postar seu codigo aqui eu tento ajudar vc a melhorar ele… também estou treinando e qualquer desafio que vier eu to topando… abrass.

É o seguinte : a empresa trabalha com tecnologia própria, eu não tenho acesso a varias partes do sistema… essa demanda veio e eu só recebi a base de dados, e preciso fazer uma consulta que traga todos os campos (citados no documento) e formatados do jeito que eles querem. entendeu ? depois que eu terminar a consulta, eu simplesmente vou gerar um excel e mandar pra eles…e não vou mais ficar por dentro do processo…mas obrigado pela ajuda

select
P.nomepessoas as Clientes,
S.nomepessoas as Funcionarios
from nomedatablea as P
inner join nomedatabela as S
where P.tipo='0' and S.tipo='1';

Só editar o nome das tabelas e colunas de acordo com seu banco de dados executar e ser feliz.

@rcarvalhoalencar, desse jeito não vai dar certo, olha o script:

SELECT  RESULTADO.Mae , RESULTADO.Pai  FROM (
SELECT  DISTINCT mae.nomepessoa as Mae,''as Pai FROM  dbo.bpm_pessoa mae 
 INNER JOIN dbo.bpm_pessoarelacionamento maerelacionamento on
  maerelacionamento.idpessoaprincipal = mae.idpessoa where 
 maerelacionamento.idtiporelacionamentopessoa = 3 
UNION

SELECT DISTINCT '' as pai,pai.nomepessoa as pai FROM
dbo.bpm_pessoa AS  pai 
INNER JOIN dbo.bpm_pessoarelacionamento pairelacionamento on 
pairelacionamento.idpessoaprincipal = pai.idpessoa where 
pairelacionamento.idtiporelacionamentopessoa = 2
)
AS RESULTADO

Por favor, diga o nome das tabelas e as colunas que você precisa de cada uma.
Ex:
tabela1 > coluna1, coluna2
tabela2 > coluna1, coluna2

tabela : bpm_pessoa
Campos : nomepessoa

tabela : bpm_pessoarelacionamento
Campos : idtiporelacionamentopessoa

na tabela de (bpm_pessoa) e no campo (nomepessoa) tem as informacoes de pessoas

na tabela (bpm_pessoarelacionamento) no campo (idtiporelacionamentopessoa) tem o identificador de pessoa
Exemplo idtiporelacionamentopessoa = 3 – é mae
idtiporelacionamentopessoa = 2 – é pai

Qual o resultado que eu preciso ?
: Exibir duas colunas, sendo , uma coluna com ‘Pai’ e outra coluna com ‘Maes’ entendeu ?

Atualmente como a imagem

Realmente quem criou seu Banco de Dados quis dificultar. Deveria ter usado uma chave estrangeira para identificar a que pessoa pertence a mãe ou o pai. sem isso não tem como fazer uma lista segura de que cada pai e mãe que aparecerem na linha vão ser da msm pessoa.

Até agora não entendi sua duvida! Tem como explicar o que acontece na realidade?

Teoricamente esta tabela de relacionamento deveria ter no minimo 3 colunas: 1 com o idPrincipal, outra com o idDoRelacionamento e uma com o tipo do relacionamento.
se tiver as 3 colunas teu problema esta fácil de se resolver.

pelo que eu tendi todas as informações estão na mesma tabela. tu pode fazer com subquerys
ex…
select
(select nomepessoa from pessoa where pessoa.codigoPessoa=p.codigoPessoa and p.tipo_pessoa=1) as Clientes,
(select nomepessoa from pessoa where pessoa.codigoPessoa=p.codigoPessoa and p.tipo_pessoa=2) as Clientes,
from pessoa p

como vc não falou qual o campo chave da tabela pessoa passei uma coluna qualquer.

Sao duas tabelas…
na tabela bpm_pessoa eu tenho o nome das pessoas,
na tabela dbo.bpm_pessoarelacionamento eu tenho
o idrelacionamento que diz se é pai ou mae.
Eu preciso tirar dessa consulta, duas colunas :
uma com as ‘Maes’ e outra com os ‘Pais’.

sao2tabelas

Quais Campos São das duas tabelas e explique cada um, eu acho que.inner Join resolve,mas preciso da explicação quais são os campos

Campos:

  • idpessoaprincipal,
  • idpessoasecundaria,
  • idtiporelacionamento

são da tabela dbo.bpm_pessoarelacionamento.

e

  • nomepessoa

é da tabela bpm_pessoa.


Olha como está minha consulta

"SELECT  RESULTADO.Mae , RESULTADO.Pai FROM (
SELECT  DISTINCT mae.nomepessoa as Mae,''as Pai 
  FROM dbo.bpm_pessoa mae 
  INNER JOIN dbo.bpm_pessoarelacionamento maerelacionamento 
  on maerelacionamento.idpessoaprincipal = mae.idpessoa 
  where maerelacionamento.idtiporelacionamentopessoa = 3 

UNION

SELECT DISTINCT '' as pai,pai.nomepessoa as pai
 FROM dbo.bpm_pessoa AS  pai 
 INNER JOIN dbo.bpm_pessoarelacionamento pairelacionamento 
 on pairelacionamento.idpessoaprincipal = pai.idpessoa 
 where pairelacionamento.idtiporelacionamentopessoa = 2
) AS RESULTADO"

e a forma que ela está retornando:

Repara que ela está primeiro carregando os pais e depois exibe as mães.

Esse é o problema, eu não consigo fazer com que a consulta carregue as mães nas primeiras linhas, eu preciso que fique alinhado, pai de um lado e mãe de outro.

Se o campo de relacionamento de uma tabela pra outra for realmente PR.idpessoa =P.idpessoaprincipal.
isso aqui te atende…
SELECT

(SELECT nomepessoa FROM bpm_pessoarelacionamento PR WHERE PR.idpessoa =P.idpessoaprincipal AND idtiporelacionamentopessoa = 3 ) AS MAE,
(SELECT nomepessoa FROM bpm_pessoarelacionamento PR WHERE PR.idpessoa =P.idpessoaprincipal AND idtiporelacionamentopessoa = 2 ) AS PAi,

FROM bpm_pessoa P

vou te dar uma dica de modelagem de banco…
sempre cria o relacionamento das tabelas com os nomes das colunas iguais.

em vez de ser assim…PR.idpessoa =P.idpessoaprincipal
tu botaria assim .PR.idpessoa =P.idpessoa

Não funciona porque cada SQL dessa traz mais de um registro. O problema ai é que o cara quis economizar e saiu caro.

1 curtida