Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Помогите


Автор: Liandra 22.10.2007, 13:45
Помогите, никак не могу найти, где ошибка у меня.(

Код

select  Customers.CompanyName,  Orders.OrderDate, SUM([Order Details].UnitPrice * [Order Details].Quantity) AS Amount, Employees.FirstName, IsNull(Customers.Region, 'нет данных') as 'регион' 
from   Employees, Orders 
INNER JOIN
                      [Order Details] ON Orders.OrderID = [Order Details].OrderID,
INNER JOIN
                      Customers ON Orders.CustomerID = Customers.CustomerID
where 
OrderDate BETWEEN ('1996-07-07') AND ('1996-12-23')
order BY OrderDate
;

Автор: Servena 22.10.2007, 14:30
Лиандра, приведи текст задания, а то невозможно понять что ты делаешь.
Ошибки: 
1. .OrderID, INNER - здесь запятая не нужна.
2. Если используешь агрегирующие функции(типа СУМ), то нужно использовать перед ОРДЕР БАЙ выражение GROUP BY.

Жду текста условия.

Добавлено через 3 минуты и 22 секунды
А, и еще
Код

from   Employees, Orders 
 - это перекрестное соединение (старый синтаксис), наверное, а скорее всего точно, здесь не нужен.

Автор: Liandra 22.10.2007, 14:44
Текстова это так)
"Сделать выборку: Клиент, регион клиента, менеджер, дата заказа, сумма заказа. За выбронный период. Если Штат не указан - написать "нет данных""

У меня она работала, но мне сказали что там надо добавить связи и оператор суммы. Вот теперь не работает(

Автор: Servena 22.10.2007, 14:56
Давай сначала разберемся с соединениями:
Код

SELECT Customers.CompanyName, Customers.Region, Employees.FirstName+' '+Employees.LastName AS Менеджер, [Order Details].UnitPrice
FROM Orders 
    INNER JOIN Customers 
        ON Orders.CustomerID = Customers.CustomerID 
    INNER JOIN Employees 
        ON Orders.EmployeeID = Employees.EmployeeID 
    INNER JOIN [Order Details] 
        ON Orders.OrderID = [Order Details].OrderID


Безо всяких там пересечений таблиц, только внутренние соединения.

Добавлено через 7 минут и 13 секунд
Теперь, чтобы использовать агрегирующие функции, например, SUM, нам нужно сделать группировку:
Код

SELECT Customers.CompanyName, Customers.Region, Employees.FirstName+' '+Employees.LastName AS Менеджер, SUM([Order Details].UnitPrice*[Order Details].Quantity)
FROM Orders 
    INNER JOIN Customers 
        ON Orders.CustomerID = Customers.CustomerID 
    INNER JOIN Employees 
        ON Orders.EmployeeID = Employees.EmployeeID 
    INNER JOIN [Order Details] 
        ON Orders.OrderID = [Order Details].OrderID
GROUP BY Customers.CompanyName, Customers.Region, Employees.FirstName+' '+Employees.LastName
 

Теперь все, за исключением того, что в WHERE вставь условие по дате, добавь отображение даты в СЕЛЕКТ и ГРУП БАЙ, и учти скидки.

Автор: Liandra 22.10.2007, 15:03
Servena
Ты стал последнее время мне, как спаситель))) Спасибо)

Автор: Servena 22.10.2007, 15:14
ОК, спасибо.
Не забывай, если тебя удовлетворил ответ - поставь галочку, что тема закончена. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)