Consulta sql server

5 respostas
S
SELECT DISTINCT C_NOMUSU, C_CIDUSU, C_BAIUSU, C_ESTUSU, C_ENDUSU, C_CEPUSU, PG_statusBaixa  
FROM ARQUSU 
LEFT JOIN ContaPagar on PG_USU_cd = C_CTRUSU
WHERE C_CIDUSU = 'NOVA ODESSA' AND C_PARUSU = 'T' and C_DTEUSU is null 
ORDER BY C_NOMUSU

veja o que ele me retorna

ABNER LONGHI	NOVA ODESSA	JD ALVORADA	SP	R FIGUEIRA	13460000   	                                                                                [b]T[/b]
ABNER LONGHI	NOVA ODESSA	JD ALVORADA	SP	R FIGUEIRA	13460000   	                                                                                [b]A[/b]
ADAO DAIRSON MAGALHAES	NOVA ODESSA                   	JD MONTE DAS OLIVEIR	SP	RUA ANGELO COCATO	13460000   	[b]T[/b]
ADAO DAIRSON MAGALHAES	NOVA ODESSA                   	JD MONTE DAS OLIVEIR	SP	RUA ANGELO COCATO	13460000   	[b]A[/b]
ADELAIDE CRISPIM	NOVA ODESSA	MATILDE BERZIN	SP	R GEORGINA TOLEDO MARTINS	13460000   	                                        [b]T[/b]
ADELAIDE CRISPIM	NOVA ODESSA	MATILDE BERZIN	SP	R GEORGINA TOLEDO MARTINS	13460000   	                                        [b]A[/b]

repare que na ultima coluna temos os resultado T q no caso significa Tudo ok e A que significa ABERTO

reparem que ele retorna 2 linhas repetidas pq ele tem um registro ok e outro aberto, precisava que ele retorna-se apenas os que nao tivessem A no registro.
Preciso que ele retorne apenas as pessoas que não tenha nada em aberto.

e tipo nao adianta colocar essa where

and PG_STATUSBAIXA <> 'A'

pq ele vai retornar isso veja:

ABNER LONGHI	NOVA ODESSA	JD ALVORADA	SP	R FIGUEIRA	13460000   	T
ADAO DAIRSON MAGALHAES	NOVA ODESSA                   	JD MONTE DAS OLIVEIR	SP	RUA ANGELO COCATO	13460000   	T
ADELAIDE CRISPIM	NOVA ODESSA	MATILDE BERZIN	SP	R GEORGINA TOLEDO MARTINS	13460000   	T

sendo que abner tem registro em ABERTO!!

Resumindo preciso que o banco me retorne apenas quem nao tiver com PG_statusBaixa ‘A’

to perdidao se alguem poder me dar essa força fico agradecido!!

5 Respostas

R

Na seu query, a última coluna é PG_statusBaixa, e é ela que declara se o registro está ou não aberto, só que no seu WHERE, você não adicionou essa condição.
No seu WHERE tem uma clausula que é C_PARUSU = 'T' e não PG_statusBaixa = T.

O certo seria:
SELECT DISTINCT C_NOMUSU, C_CIDUSU, C_BAIUSU, C_ESTUSU, C_ENDUSU, C_CEPUSU, PG_statusBaixa    
    FROM ARQUSU   
    LEFT JOIN ContaPagar on PG_USU_cd = C_CTRUSU  
    WHERE 
    C_CIDUSU = 'NOVA ODESSA' AND 
    PG_statusBaixa = 'T' AND // <- alterar aqui
    C_DTEUSU is null   

    ORDER BY C_NOMUSU

Fazendo isso só irá retornar registros que estão OK.
Caso esteja vindo mais de um registro do mesmo cliente, é devido ao tipo de relacionamento (LEFT JOIN) que você está fazendo.
Confira corretamente como estão os registros na tabela.

S

como eu havia dito

se eu deixar assim

SELECT DISTINCT C_NOMUSU, C_CIDUSU, C_BAIUSU, C_ESTUSU, C_ENDUSU, C_CEPUSU, PG_statusBaixa  
FROM ARQUSU 
LEFT JOIN ContaPagar on PG_USU_cd = C_CTRUSU
WHERE C_CIDUSU = 'NOVA ODESSA' AND C_PARUSU = 'T' and C_DTEUSU is null 
and PG_STATUSBAIXA <> 'A' 
ORDER BY C_NOMUSU

agora pensa cumigo

Janeiro PAGO = T
Fevereiro PAGO = T
Março ABERTO = A

como ele ja tem no registro T como pago ele vai retornar do mesmo jeito a pessoa e preciso filtrar pessoa que nao tem NENHUM ‘A’.
O SEGREDO ESTA EM NAO PODER RETORNAR ALGUEM QUE TENHA ‘A’

A

Não entendi direito sua modelagem, então vou tentar explicar em português e você converte na query.

  • Faça uma query que selecione o código todos os usuários que possuam PG_statusBaixa = 'A’
    Esses usuários não poderão aparecer na sua listagem final.

  • Na sua query original, coloque um NOT IN com o resultado dessa query de cima.

R

Agora você explicou melhor o seu problema.

Faz assim:
SELECT DISTINCT C_NOMUSU, C_CIDUSU, C_BAIUSU, C_ESTUSU, C_ENDUSU, C_CEPUSU, PG_statusBaixa    
FROM ARQUSU   
LEFT JOIN ContaPagar on PG_USU_cd = C_CTRUSU  
WHERE 
C_CIDUSU = 'NOVA ODESSA' AND 
C_PARUSU = 'T' AND 
C_DTEUSU IS NULL AND
C_NOMUSU NOT IN (SELECT C_NOMUSU FROM ARQUSU LEFT JOIN ContaPagar on PG_USU_cd = C_CTRUSU WHERE PG_STATUSBAIXA = 'A') //irá trazer os usuários que não estejam na listagem dos usuários que tem alguma conta em aberta
   
ORDER BY C_NOMUSU
S

renata torres eu te amo hahahaha vlw !!

Criado 11 de janeiro de 2012
Ultima resposta 11 de jan. de 2012
Respostas 5
Participantes 3