On 17/05/2015 14:12, Osvaldo Kussama wrote:
Em 17/05/15, Matheus Saraiva<[email protected]> escreveu:
Tenho as seguintes tabelas:
QUARTO
------------
numero_quarto varchar(5) PK NOT NULL,
tipo_quarto integer FK NOT NULL,
valor_quarto numeric(7,2) NOT NULL,
capacidade_quarto integer NOT NILL
TIPOSQUARTO
--------------------
id_tipoquarto SERIAL PK NOT NULL,
descricao_tipoquarto varchar(30)
FRIGOBARS
----------------
quarto_frigobar FK PK NOT NULL, --(FK >> QUARTOS)
produto_frigobar FK PK NOT NULL, --(FK >> PRODUTOS)
quantidade_frigobar integer NOT NULL
PRODUTO
--------------
id_produto SERIAL PK NOT NULL,
descricao_produto varchar(50) NOT NULL,
valor_produto numeric(7,2)
Preciso fazer uma consulta que me traga:
numero_quarto | descricao_tipoquarto | valor_quarto | capacidade_quarto|frigobar
1 Luxo 100,00 3 'COM'
2 Simples 80,00 2 'SEM'
Minha dificuldade está na coluna "frigobar". Pela lógica, eu sei o que
deve ser feito. Deve-se procurar na tabela frigobar se existe um
registro para o número do quarto em questão.
Se houver retornar a palavra 'COM', caso contrário retornar 'SEM'. Porém
não sei como montar o SQL para esse caso.
Existe o SELECT CASE, mas não encontrei um jeito de colocar tudo em uma
só query.
Eu consigo trazer uma parte com o trivial JOIN:
SELECT
"QUARTOS"."numero_quarto",
"TIPOSQUARTO"."descricao_tipoquarto",
"QUARTOS"."valor_quarto",
"QUARTOS"."capacidade_quarto"
FROM
"QUARTOS"
JOIN
"TIPOSQUARTO" ON "QUARTOS"."tipo_quarto" =
"TIPOSQUARTO"."id_tipoquarto";
Mas não achei uma maneira de fazer o lance do frigobar.
Eu também precisaria criar um select que me retornasse quantos quartos
existem de cada tipo, também sei a lógica, (procurar na tabela "QUARTOS"
quantos são do tipo 1, 2, 3, ....).
Isso pode ser feito com COUNT() + WHERE, mas eu preciso uma query que
retorne.
descricao_tipoquarto | COUNT()
Luxo 10
Simples 20
Grato!
_______________________________________________
Faça um LEFT OUTER JOIN com a tabela FRIGOBARS e teste, no resultado,
se algum de seus campos é NULL, caso em que não tem frigobar.
Osvaldo
Entendo, mas eu quero que o próprio SQL já me retorne nesse formato
numero_quarto | descricao_tipoquarto | valor_quarto | capacidade_quarto|frigobar
1 Luxo 100,00 3 'COM'
2 Simples 80,00 2 'SEM'
Ou seja, já me retorna com a string 'COM' ou 'SEM', sei que o SELECT CASE faz
isso:
SELECT CASE WHEN
quarto_frigobar = numero_quarto
THEN
'COM'
ELSE
'SEM'
END FROM
"FRIGOBARS";
Mas eu não sei como deixar isso tudo no mesmo select, ou seja, para cada "QUARTO" deve
ser verificado se existe um registro em "FRIGOBARS"
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral