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

Responder a