Usuário com melhor resposta
Ajuda com Instrução

Pergunta
-
Pessoal
Como Faço esta Instrução
Select a.*,b.*,c.*
From #TabelaA a
Join #TabelaB b
On a.ID = b.Boleto_Id
Join #TabelaC c
On a.Id = c.Boleto_Id
Where c.ServicoTaxa_Id = 89
And c.ServicoTaxa_Id = 98
And c.ServicoTaxa_Id = 99
Preciso que todos os codigos (neste caso 89,98,99)
retornem na minha Instrução,
Como Faço?Maricelmo
Respostas
-
boa tarde, Marcelino
veja este teste que fiz
CREATE TABLE #TabelaA
(
ID Int Identity(1,1) NOT NULL,
BoletoSituacao_Id Int NULL,
Emissao DateTime,
Vencimento DateTime,
ParcelaValor Decimal(18,2)
)
GO
CREATE TABLE #TabelaB
(
Boleto_Id Int NOT NULL,
Placa Varchar(7) NULL,
DataAlteracao Datetime
)
GO
CREATE TABLE #TabelaC
(
Boleto_Id Int NOT NULL,
ServicoTaxa_Id Int NOT NULL,
Valor Decimal(18,2)
)
Go
select * from #TabelaA
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),100.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),200.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),300.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),400.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),500.00)
select * from #TabelaB
Insert #TabelaB
( Boleto_Id,
Placa,
DataAlteracao
)
(Select ID,null,GETDATE() From #TabelaA)
Go
select * from #TabelaC
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(1,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(1,90,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(1,91,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(2,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(2,98,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(2,99,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,98,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,99,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,100,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(4,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(4,90,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(5,91,1.00)
Select
c.Boleto_Id
From
#TabelaA a Join
#TabelaB b On a.ID = b.Boleto_Id Join
#TabelaC c On a.Id = c.Boleto_Id
Where
c.ServicoTaxa_Id IN (89,98,99)
GROUP BY
c.Boleto_Id--,c.ServicoTaxa_Id
HAVING
COUNT(DISTINCT c.ServicoTaxa_Id) = 3
Resultado
Boleto_Id
2
3
Porem o Boleto_Id Numero 3
exstem 4 codigos (89,98,99,100)
não deveria me retornar
Maricelmo
tente assim:
Select c.Boleto_Id From #TabelaA a Join #TabelaB b On a.ID = b.Boleto_Id Join #TabelaC c On a.Id = c.Boleto_Id Where c.ServicoTaxa_Id IN (89,98,99) GROUP BY c.Boleto_Id HAVING COUNT(DISTINCT c.ServicoTaxa_Id) = 3 and not exists(select 1 from #TabelaC as x where x.Boleto_Id = c.Boleto_Id and x.ServicoTaxa_Id not IN (89,98,99))
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
- Marcado como Resposta Maricelmo quinta-feira, 6 de setembro de 2012 14:16
Todas as Respostas
-
Bom dia Maricelmo,
Você pode usar IN.
Where c.ServicoTaxa_Id in (89,98,99)
At.
Rafael- Sugerido como Resposta Roberson Ferreira _Moderator quarta-feira, 5 de setembro de 2012 14:55
- Não Sugerido como Resposta Roberson Ferreira _Moderator quarta-feira, 5 de setembro de 2012 16:55
-
-
Não virá não. Pode testar.
A solução do Rafael está ok.
Neste caso o in é a mesma coisa que:
Where c.ServicoTaxa_Id = 89
OR c.ServicoTaxa_Id = 98
OR c.ServicoTaxa_Id = 99Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta. -
bom dia Robson,
Então, eu testei e o retorno
não era o que eu esperava,
talvez, não me fiz entender
muito bem,
explicarei melhor:
preciso que retorne os três Codigos (89,98,99)
caso haja apenas um (01) , não preciso
tem que ser os três ou nada,
e desta forma usando o IN, se tiver o
codigo 89 vira, ou se tiver o codigo 98 tambem
vira, ou ainda se existir o codigo 99, mas eu
preciso que exista os três,
entendeu!
Maricelmo
- Editado Maricelmo quarta-feira, 5 de setembro de 2012 15:07
-
Boa tarde, segue sugestão:
Select c.Boleto_Id From #TabelaA a Join #TabelaB b On a.ID = b.Boleto_Id Join #TabelaC c On a.Id = c.Boleto_Id Where c.ServicoTaxa_Id IN (89,98,99) GROUP BY c.Boleto_Id HAVING COUNT(DISTINCT c.ServicoTaxa_Id) = 3
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
-
Agora sim você de uma informação diferente, rs.
Tente fazer Joins com SubSelects de suas condições.
Exemplo:
Select a.*, b.*, c.* From #TabelaA a Join #TabelaB b On a.ID = b.Boleto_Id Join #TabelaC c On a.Id = c.Boleto_Id Join (Select Distinct ServicoTaxa_Id From #TabelaC Where ServicoTaxa_Id = 89) C1 on (C1.ServicoTaxa_Id = C.ServicoTaxa_Id) Join (Select Distinct ServicoTaxa_Id From #TabelaC Where ServicoTaxa_Id = 98) C2 on (C2.ServicoTaxa_Id = C.ServicoTaxa_Id) Join (Select Distinct ServicoTaxa_Id From #TabelaC Where ServicoTaxa_Id = 99) C3 on (C3.ServicoTaxa_Id = C.ServicoTaxa_Id)
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.- Sugerido como Resposta Roberson Ferreira _Moderator quarta-feira, 5 de setembro de 2012 16:55
-
boa tarde, Marcelino
veja este teste que fiz
CREATE TABLE #TabelaA
(
ID Int Identity(1,1) NOT NULL,
BoletoSituacao_Id Int NULL,
Emissao DateTime,
Vencimento DateTime,
ParcelaValor Decimal(18,2)
)
GO
CREATE TABLE #TabelaB
(
Boleto_Id Int NOT NULL,
Placa Varchar(7) NULL,
DataAlteracao Datetime
)
GO
CREATE TABLE #TabelaC
(
Boleto_Id Int NOT NULL,
ServicoTaxa_Id Int NOT NULL,
Valor Decimal(18,2)
)
Go
select * from #TabelaA
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),100.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),200.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),300.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),400.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),500.00)
select * from #TabelaB
Insert #TabelaB
( Boleto_Id,
Placa,
DataAlteracao
)
(Select ID,null,GETDATE() From #TabelaA)
Go
select * from #TabelaC
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(1,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(1,90,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(1,91,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(2,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(2,98,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(2,99,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,98,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,99,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,100,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(4,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(4,90,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(5,91,1.00)
Select
c.Boleto_Id
From
#TabelaA a Join
#TabelaB b On a.ID = b.Boleto_Id Join
#TabelaC c On a.Id = c.Boleto_Id
Where
c.ServicoTaxa_Id IN (89,98,99)
GROUP BY
c.Boleto_Id--,c.ServicoTaxa_Id
HAVING
COUNT(DISTINCT c.ServicoTaxa_Id) = 3
Resultado
Boleto_Id
2
3
Porem o Boleto_Id Numero 3
exstem 4 codigos (89,98,99,100)
não deveria me retornar
Maricelmo
- Editado Maricelmo quarta-feira, 5 de setembro de 2012 17:29
-
boa tarde, Marcelino
veja este teste que fiz
CREATE TABLE #TabelaA
(
ID Int Identity(1,1) NOT NULL,
BoletoSituacao_Id Int NULL,
Emissao DateTime,
Vencimento DateTime,
ParcelaValor Decimal(18,2)
)
GO
CREATE TABLE #TabelaB
(
Boleto_Id Int NOT NULL,
Placa Varchar(7) NULL,
DataAlteracao Datetime
)
GO
CREATE TABLE #TabelaC
(
Boleto_Id Int NOT NULL,
ServicoTaxa_Id Int NOT NULL,
Valor Decimal(18,2)
)
Go
select * from #TabelaA
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),100.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),200.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),300.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),400.00)
Insert Into #TabelaA Values(2,GETDATE(),GETDATE(),500.00)
select * from #TabelaB
Insert #TabelaB
( Boleto_Id,
Placa,
DataAlteracao
)
(Select ID,null,GETDATE() From #TabelaA)
Go
select * from #TabelaC
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(1,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(1,90,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(1,91,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(2,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(2,98,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(2,99,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,98,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,99,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(3,100,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(4,89,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(4,90,1.00)
Insert Into #TabelaC (Boleto_Id,ServicoTaxa_Id,Valor) Values(5,91,1.00)
Select
c.Boleto_Id
From
#TabelaA a Join
#TabelaB b On a.ID = b.Boleto_Id Join
#TabelaC c On a.Id = c.Boleto_Id
Where
c.ServicoTaxa_Id IN (89,98,99)
GROUP BY
c.Boleto_Id--,c.ServicoTaxa_Id
HAVING
COUNT(DISTINCT c.ServicoTaxa_Id) = 3
Resultado
Boleto_Id
2
3
Porem o Boleto_Id Numero 3
exstem 4 codigos (89,98,99,100)
não deveria me retornar
Maricelmo
tente assim:
Select c.Boleto_Id From #TabelaA a Join #TabelaB b On a.ID = b.Boleto_Id Join #TabelaC c On a.Id = c.Boleto_Id Where c.ServicoTaxa_Id IN (89,98,99) GROUP BY c.Boleto_Id HAVING COUNT(DISTINCT c.ServicoTaxa_Id) = 3 and not exists(select 1 from #TabelaC as x where x.Boleto_Id = c.Boleto_Id and x.ServicoTaxa_Id not IN (89,98,99))
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
- Marcado como Resposta Maricelmo quinta-feira, 6 de setembro de 2012 14:16
-