Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выборка нескольких значений с разными признаками  [new]
Ens-Fens
Member

Откуда:
Сообщений: 5
Из таблицы с повторяющимися основными значениями(пусть по классике будут поставщики) надо выбрать тех,кто поставил больше всех деталей каждого типа.
Ну сначала я сгруппировал по столбцу с поставщиками и вывел сумму деталей каждого типа для каждого поставщика. Как дальше мне выбирать значения? Пробовал потом сортировать эту таблицу по значению одного из типа деталей,выбирать максимальное и через exists in во внешнем запросе вносить одного поставщика с максимальным показателем количества одного из типа деталей в новую таблицу.Во первых не получилось во вторых как то глупо получится так делать для каждого типа деталей.
Microsoft SQL Management Studio 2008
27 янв 12, 19:38    [11986184]     Ответить | Цитировать Сообщить модератору
 Re: выборка нескольких значений с разными признаками  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Ens-Fens
Из таблицы с повторяющимися основными значениями(пусть по классике будут поставщики) надо выбрать тех,кто поставил больше всех деталей каждого типа.
Ну сначала я сгруппировал по столбцу с поставщиками и вывел сумму деталей каждого типа для каждого поставщика. Как дальше мне выбирать значения? Пробовал потом сортировать эту таблицу по значению одного из типа деталей,выбирать максимальное и через exists in во внешнем запросе вносить одного поставщика с максимальным показателем количества одного из типа деталей в новую таблицу.Во первых не получилось во вторых как то глупо получится так делать для каждого типа деталей.

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

Ens-Fens
Microsoft SQL Management Studio 2008

это клиент, версия скл сервера какая?
27 янв 12, 20:42    [11986448]     Ответить | Цитировать Сообщить модератору
 Re: выборка нескольких значений с разными признаками  [new]
Ens-Fens
Member

Откуда:
Сообщений: 5
2008 sp1
ок.
таблица,в одной номер выхода корабля на ловлю
во второй номер выходившего корабля
в двух столбцах даты
в трёх оставшихся столбцах 3 сорта рыбы

нужно для каждого сорта рыбы вывести корабль привезший наибольшее её количество
27 янв 12, 20:48    [11986464]     Ответить | Цитировать Сообщить модератору
 Re: выборка нескольких значений с разными признаками  [new]
Ens-Fens
Member

Откуда:
Сообщений: 5
одном столбце номер выхода корабля на ловлю
во втором номер выходившего корабля
в двух столбцах даты
в трёх оставшихся столбцах 3 сорта рыбы

там немножко задумался)
27 янв 12, 21:01    [11986519]     Ответить | Цитировать Сообщить модератору
 Re: выборка нескольких значений с разными признаками  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
https://www.sql.ru/forum/actualthread.aspx?tid=127456

Если вы хотите получить быстрый ответ на свой вопрос, то вы должны выложить ваши исходные данные в виде таблицы и скриптом для её наполнения и результирующую таблицы (тот результат, который вам нужен на выходе)
27 янв 12, 22:19    [11986996]     Ответить | Цитировать Сообщить модератору
 Re: выборка нескольких значений с разными признаками  [new]
AndreTM
Member

Откуда: Где-то в вологодских лесах...
Сообщений: 6900
Почему не хочется отобрать по каждому из видов рыбы? - а потому, что ваша таблица должна содержать не "три столбца с каждым из видов", а "идентификатор вида, количество по данному виду", и тогда не нужно делать объединение столбцов...

А так - что-то типа этого, прямо и тупо (можно было переписать и через CTE, но это непринципиально):
+
select t.idShip, MAX(t.sumF) as maxSum from
( select idShip, SUM(fish1) as sumF from trawl
 where DateStart>=@dtStart and DateEnd<=@dtEnd
 group by IdShip
union all
select idShip, SUM(Fish2) as sumF from trawl
 where DateStart>=@dtStart and DateEnd<=@dtEnd
 group by IdShip
union all
select idShip, SUM(Fish3) as sumF from trawl
 where DateStart>=@dtStart and DateEnd<=@dtEnd
 group by IdShip ) t
group by t.IdShip
28 янв 12, 10:35    [11988569]     Ответить | Цитировать Сообщить модератору
 Re: выборка нескольких значений с разными признаками  [new]
Ens-Fens
Member

Откуда:
Сообщений: 5
AndreTM
Почему не хочется отобрать по каждому из видов рыбы? - а потому, что ваша таблица должна содержать не "три столбца с каждым из видов", а "идентификатор вида, количество по данному виду", и тогда не нужно делать объединение столбцов...

А так - что-то типа этого, прямо и тупо (можно было переписать и через CTE, но это непринципиально):
+
+
select t.idShip, MAX(t.sumF) as maxSum from
( select idShip, SUM(fish1) as sumF from trawl
 where DateStart>=@dtStart and DateEnd<=@dtEnd
 group by IdShip
union all
select idShip, SUM(Fish2) as sumF from trawl
 where DateStart>=@dtStart and DateEnd<=@dtEnd
 group by IdShip
union all
select idShip, SUM(Fish3) as sumF from trawl
 where DateStart>=@dtStart and DateEnd<=@dtEnd
 group by IdShip ) t
group by t.IdShip

Попробовал это.Тут выводится максимальное количество какой-то рыбы для каждого корабля,мне надо не это.
Немного переделал, но всё равно не вышло,ибо оказывается,что используя юнион я могу использовать ордер бай только ко всей вышедшей таблице,но не к отдельным селектам.
Это можно обойти?
29 янв 12, 22:10    [11993114]     Ответить | Цитировать Сообщить модератору
 Re: выборка нескольких значений с разными признаками  [new]
Ens-Fens
Member

Откуда:
Сообщений: 5
всё,уже разобрался сам.Всем спасибо)
29 янв 12, 22:28    [11993157]     Ответить | Цитировать Сообщить модератору
 Re: выборка нескольких значений с разными признаками  [new]
AndreTM
Member

Откуда: Где-то в вологодских лесах...
Сообщений: 6900
Ens-Fens
Тут выводится максимальное количество какой-то рыбы для каждого корабля,мне надо не это...

Ви же знаите - стагые евгеи вам никогда ни дадут полный ответ...

Вам был дан путь решения - а добавить простое поле с номером столбца "от рыбы" в каждый из селектов, или сделать case при объединении - это уж на ваше усмотрение
29 янв 12, 23:17    [11993272]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить