Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Затормозил с запросом MSSQL 2000:( 
:(
    Опции темы
CityAC
Дата 12.9.2007, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 3.11.2006
Где: Украина Горловка

Репутация: нет
Всего: 1



Составьте запрос, который выводит имена и города всех покупателей, имеющих тоже количество заказов, что и покупатель " Bon app' ".
Имеется в виду  база Northwind, которая идет в комплекте MSSQL 2000
Вот до чего я дошел
Прошу не судить изучаю сикл 1 месяц.
Код

USE Northwind
DECLARE @orders int
SET @orders = ( SELECT Count(*)
    FROM Orders o1 
    WHERE CustomerId = 'BONAP')

SELECT DISTINCT CompanyName, City
FROM Customers c 
WHERE exists (
    SELECT Distinct o1.CustomerID, Count(o1.CustomerID)
    FROM Orders o1
    WHERE Count(o1.CustomerID) = @orders   --по логике хочется написать именно так, но сикл такое не допускает, может че то 
                                                                                 -- надо дописать, подскажите
    GROUP BY o1.CustomerID
    ) -- Как извлечь из этой таблицы вычисляемое значение а именно Count(o1.CustomerID

GROUP by CompanyName, City ) 




Добавлено через 11 минут и 37 секунд
Ну так всегда бывает, пока здесь объяснял суть вопроса и сам все понял. Получилось корявенько. Если кто предложит более элегантное решение - БУДУ СКАЗАТЬ БОЛЬШОЕ СПАСИБО.
Код

DECLARE @orders int
SET @orders = ( SELECT Count(*)
    FROM Orders o1 
    WHERE CustomerId = 'BONAP')+1 -- ДОБАВЛЯЛ ДЛЯ ЭКСПЕРИМЕНТОВ. Т.К.  столько заказов только у этого клиента

SELECT DISTINCT CompanyName, City
FROM Customers c 
WHERE CustomerId in (
    SELECT Distinct o1.CustomerID--, Count(o1.CustomerID)
    FROM Orders o1    
    GROUP BY o1.CustomerID
    having Count(o1.CustomerID) = @orders
    ) 
GROUP by CompanyName, City



Это сообщение отредактировал(а) CityAC - 12.9.2007, 21:49
--------------------
Вижу цель, не вижу припятствий.  
PM MAIL ICQ   Вверх
Servena
Дата 3.10.2007, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



Код

SELECT DISTINCT c.CompanyName, c.City, COUNT(o.CustomerID)
FROM Customers AS c
INNER JOIN Orders AS o  --внутреним соединением убираю тех покупателей, которые 
    ON c.CustomerID=o.CustomerID --не разместили ни одного заказа
GROUP BY c.CompanyName,c.City --группирую, чтобы использовать агрегирующую функцию COUNT
HAVING COUNT(o.CustomerID)=(SELECT Count(*) FROM Orders WHERE CustomerId = 'BONAP') --ставлю условие на количество заказов - у меня их 17


Вот мой вариант. Попробуй, так должно быть более понятно и используются разные основные конструкции.

Добавлено через 2 минуты и 50 секунд
DISTINCT в первой строчке не нужно, осталось с предыдущего запроса(хотя и так работает)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0388 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.