Pergunta

Eu quero fazer uma consulta para gatos de lista que levou mais tempo do que os gatos médio de venda? Eu tenho cinco tabelas:

Animal, Venda, AnimalOrderItem, AnimalOrder e SaleAnimal

mesa Animal: AnimalID, Nome, Categoria (Cão, gato, peixe)

SaleAnimal tabela: SaleID, AnimalID, SalePrice

mesa de venda: SaleID, data, employeeID, Cliente

mesa AnimalOrderItem: OrderID, AnimalID, o custo

AnimalOrder: CódigoDaEncomenda, DataDaEncomenda, Data de recebimento, SupplierID, shippingcost, EmployeeID

Há outras tabelas Eu não acho que eles têm um efeito sobre a consulta.

Eu pensei da seguinte ... fazer uma consulta para dias calcular a vender por todo ex:.

[SaleDate]-[ReceiveDate] AS DaysToSell
Have the INNER JOIN built:
Sale INNER JOIN ((AnimalOrder INNER JOIN (Animal INNER JOIN AnimalOrderItem
ON Animal.AnimalID = AnimalOrderItem.AnimalID) ON AnimalOrder.
OrderID = AnimalOrderItem.OrderID) INNER JOIN SaleAnimal ON Animal.
AnimalID = SaleAnimal.AnimalID) ON Sale.SaleID = SaleAnimal.SaleID

Criar outra consulta com base na consulta acima

SELECT AnimalID, Name, Category, DaysToSell
WHERE Category="Cat" AND DaysToSell>
(SELECT Avg(DaysToSell)
FROM the earlier query
WHERE Category="Cat"
ORDER BY DaysToSell DESC;

Depois de executar a consulta que eu tenho de erro dizendo

ORA-00921: fim inesperado de SQL comando

Todas as sugestões! por favor

Foi útil?

Solução

As consultas podem ser combinados com um subconsulta. Por exemplo,

select *
from (
    select * 
    from mytable
) subquery

Aplicando este padrão para o seu problema parece bastante simples.

Outras dicas

Não vejo o suporte fechado que combina com a escolha avg

Ok, eu vim acima com este:

    SELECT AnimalID, Name, Category,
           [SaleDate]-[ReceiveDate] AS DaysToSell
    FROM   Sale INNER JOIN ((AnimalOrder INNER JOIN (Animal INNER JOIN AnimalOrderItem ON Animal.AnimalID = AnimalOrderItem.AnimalID) ON AnimalOrder.OrderID = AnimalOrderItem.OrderID)
           INNER JOIN SaleAnimal ON Animal.AnimalID = SaleAnimal.AnimalID) ON Sale.SaleID = SaleAnimal.SaleID
    WHERE  Category = "Cat"
    AND    ([SaleDate]-[ReceiveDate]) > (SELECT AVG([SaleDate]-[ReceiveDate])
                                         FROM   Sale INNER JOIN ((AnimalOrder INNER JOIN (Animal INNER JOIN AnimalOrderItem ON Animal.AnimalID = AnimalOrderItem.AnimalID) ON AnimalOrder.OrderID = AnimalOrderItem.OrderID)
                                         INNER JOIN SaleAnimal ON Animal.AnimalID =SaleAnimal.AnimalID) ON Sale.SaleID = SaleAnimal.SaleID
                                         WHERE Category = "Cat")
    ORDER BY ([SaleDate]-[ReceiveDate]) DESC;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top