2015-04-02 4 views
-3

Мне нужно создать запрос, который создаст таблицу для клиента - «Франк Спенсер» (вы увидите его в таблице «Клиенты» ниже).Выбор правильного запроса

Новая таблица должна содержать общую сумму каждого продукта, который клиент когда-либо покупал, оставив его по заказу, который еще не отправлен, причем каждый продукт появляется только один раз в новой таблице.

Мои таблицы, как показано ниже.

enter image description here

enter image description here

Не могли бы вы мне посоветовать, какой из них ниже является лучшим?

а) with customer as (select * from customers where lower(CustomerName) = 'frank spencer'),customerorders as(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName into franksorders from orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName

б) with customer as (select * from customers where lower(CustomerName) = 'frank spencer') join customerorders as(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select total(oi.QuantityOrdered) as TotalOrdered, s.ItemName into new table franksorders using orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName

с) with customer (select * from customers where 'frank spencer' in (CustomerName)) with customerorders (select OrderId from orders o where o.CustomerId in(select CustomerId from customer) and OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName create table franksorders using orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName

д) using customer with (select * from customers where CustomerName = 'frank spencer' and customerorders with(select OrderId from orders o where o.CustomerId in(select CustomerId from customer) then OrderShipped = 'True') select sum(oi.QuantityOrdered) as TotalOrdered, s.ItemName into franksorders from orderitems oi join stock s on oi.StockItemId = s.StockItemId where OrderId in(select * from customerorders) group by ItemName order by ItemName

+0

В вашем тестировании, который возвращает желаемый результат в кратчайшие сроки? –

+0

Вы только что скопировали какую-то школьную задачу и захотели получить нужный ... – Nightmaresux

+0

Это выглядит ужасно домашнее задание. Но оставив это в стороне, что определяет «лучший»? Что вы на самом деле пытались? – Andrew

ответ

0

В, С, и D имеют использования в них, которые не поддерживаются в SQL Server от того, что я могу сказать. ИСПОЛЬЗОВАНИЕ, но не ИСПОЛЬЗОВАНИЕ. Таким образом, ответ: A. В следующий раз вы можете использовать poorsql.com для форматирования вашего кода так, и легче найти ошибки.

WITH customer 
AS (
    SELECT * 
    FROM customers 
    WHERE lower(CustomerName) = 'frank spencer' 
    ) 
    ,customerorders 
AS (
    SELECT OrderId 
    FROM orders o 
    WHERE o.CustomerId IN (
      SELECT CustomerId 
      FROM customer 
      ) 
     AND OrderShipped = 'True' 
    ) 
SELECT sum(oi.QuantityOrdered) AS TotalOrdered 
    ,s.ItemName 
INTO franksorders 
FROM orderitems oi 
INNER JOIN stock s ON oi.StockItemId = s.StockItemId 
WHERE OrderId IN (
     SELECT * 
     FROM customerorders 
     ) 
GROUP BY ItemName 
ORDER BY ItemName 
Смежные вопросы