Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Возможно ли средствами MSSQL получить выборку  [new]
r77.eduard
Member

Откуда:
Сообщений: 7
Имеется таблица:

item GroupNumber
300 1
301 1
302 2
303 3
304 3

Возможно ли с помощью SELECT получить следующую выборку:
300 302 303
300 302 304
301 302 303
301 302 304
2 мар 16, 11:39    [18886651]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Glory
Member

Откуда:
Сообщений: 104760
Возможно. Получайте.
2 мар 16, 11:42    [18886662]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
r77.eduard
Member

Откуда:
Сообщений: 7
Glory,

А каким образом, если не секрет? Я обратился на форум за помощью, а Ваш ответ совсем не проясняет ситуацию
2 мар 16, 11:43    [18886674]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
r77.eduard, по какому принципу Вы получили итоговые значения? Малость неясна причинно-следственная связь...
2 мар 16, 11:44    [18886680]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Glory
Member

Откуда:
Сообщений: 104760
r77.eduard
А каким образом, если не секрет?

Наверное какими то SELECT-ами

r77.eduard
Я обратился на форум за помощью, а Ваш ответ совсем не проясняет ситуацию

Ваш вопрос тоже не блещет обилием информации.
И ваших попыток написания запроса тоже нигде не видно.
2 мар 16, 11:45    [18886689]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20609
SELECT t1.item, t2.item, t3.item
FROM table t1, table t2, table t3
WHERE t1.GroupNumber=1
  AND t2.GroupNumber=2
  AND t3.GroupNumber=3
ORDER BY 1, 2, 3
2 мар 16, 11:57    [18886771]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
r77.eduard
Member

Откуда:
Сообщений: 7
AlanDenton,

Необходимо выбрать уникальные записи из набора данных по следующему принципу:
Item = 300 - GroupNumer=1 Item = 302 - GroupNumer=2 Item = 303 - GroupNumer=3
Item = 300 - GroupNumer=1 Item = 302 - GroupNumer=2 Item = 304 - GroupNumer=3
Item = 301 - GroupNumer=1 Item = 302 - GroupNumer=2 Item = 303 - GroupNumer=3
Item = 301 - GroupNumer=1 Item = 302 - GroupNumer=2 Item = 304 - GroupNumer=3

т.е. необходимо получить все возможные комбинации Item'ов, входящих в разные GroupNumber
2 мар 16, 12:06    [18886811]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
r77.eduard
Member

Откуда:
Сообщений: 7
Akina,

Данный способ работает, если заранее известно количество GroupNumber.
А если там будет не 3 группы, а 2, или 10?
2 мар 16, 12:10    [18886834]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20609
r77.eduard
Данный способ работает, если заранее известно количество GroupNumber.
А если там будет не 3 группы, а 2, или 10?

Это приведёт к тому, что структура выборки зависит от данных, не так ли? Чем больше групп, тем больше полей в выборке...
А это, в свою очередь, бывает только в случае PIVOT query. Вот по нему и читайте справку.
2 мар 16, 12:22    [18886902]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Glory
Member

Откуда:
Сообщений: 104760
r77.eduard
А если там будет не 3 группы, а 2, или 10?

А если 1000 групп по 1000 итемов в каждой, то как будет выглядеть конечный результат ?
2 мар 16, 12:24    [18886917]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
r77.eduard
Member

Откуда:
Сообщений: 7
Glory,

Количество групп не будет превышать 4, а количество item в каждой группе не будет превышать 5 по условиям задачи
2 мар 16, 12:27    [18886937]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Glory
Member

Откуда:
Сообщений: 104760
r77.eduard
Количество групп не будет превышать 4, а количество item в каждой группе не будет превышать 5

А говорили, что количество групп неизвестно.
2 мар 16, 12:27    [18886942]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
r77.eduard
Member

Откуда:
Сообщений: 7
Glory,

Я не говорил, что количество групп неизвестно.
r77.eduard
Akina,

Данный способ работает, если заранее известно количество GroupNumber.
А если там будет не 3 группы, а 2, или 10?


Я спрашивал если будет разное количество групп.
Для уточнения вопроса сообщаю, что количество групп не менее 1-й, но не более 4-х
2 мар 16, 12:32    [18886974]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Glory
Member

Откуда:
Сообщений: 104760
r77.eduard
Я спрашивал если будет разное количество групп.
Для уточнения вопроса сообщаю, что количество групп не менее 1-й, но не более 4-х

Ну так и расширьте пример до максимального числа групп.

r77.eduard
Я не говорил, что количество групп неизвестно.

Т.е. слова "А если там будет не 3 группы, а 2, или 10" нужно было воспринимать, как "мне известно число групп" ? Занятно
2 мар 16, 12:35    [18886989]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
r77.eduard
Member

Откуда:
Сообщений: 7
Glory,
Если расширить пример, который предоставил Akina, до максимального количества групп, то, в случае если количество групп меньше максимального, мы получаем пустой результирующий набор.

А для каждого отдельного случая писать отдельный скрипт как-то не очень красиво получается.
PIVOT для этой цели тоже не подходит.

Единственное, что сейчас приходит в голову, писать отдельную процедуру, в которой с помощью курсоров можно получить необходимый результат
2 мар 16, 12:42    [18887025]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Glory
Member

Откуда:
Сообщений: 104760
r77.eduard
Если расширить пример, который предоставил Akina, до максимального количества групп, то, в случае если количество групп меньше максимального, мы получаем пустой результирующий набор.

Мда.
Вам показали идею.
А вы наверное ждете конечный запрос, который подойдет под все вваши уже высказанные требования и еще невысказанные тоже ?
2 мар 16, 12:46    [18887046]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Проходил мимо и задумался
Guest
r77.eduard,

Как бы только такой бред в голову пришел
with t as
(
select 
300 item, 1 GroupNumber
union all
select 301,     1
union all
select 302,     2
union all
select 303,     3
union all
select 304,     3
)

select * from t t1
left join t t2
on t1.GroupNumber = t2.GroupNumber+1
left join t t3
on t2.GroupNumber = t3.GroupNumber+1

И так далее
2 мар 16, 13:50    [18887449]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20609
r77.eduard
Если расширить пример, который предоставил Akina, до максимального количества групп, то, в случае если количество групп меньше максимального, мы получаем пустой результирующий набор.
Расширять надо до существующего, а не до максимально возможного. И тогда вместо декарта и пост-отбора делать пачку фильтрующих подзапросов.

r77.eduard
для каждого отдельного случая писать отдельный скрипт как-то не очень красиво получается.
ХП, считающая количество групп и в зависимости от него использующая тот или иной запрос - обычная практика. И вариант динамического SQL в ХП - тоже ничего.

r77.eduard
Единственное, что сейчас приходит в голову, писать отдельную процедуру, в которой с помощью курсоров
Забудь срочно.
2 мар 16, 13:52    [18887480]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Опять прошел
Guest
Проходил мимо и задумался,

Слегка подкорректировал запрос, чтобы не путать ТСа
select t3.item , t2.item, t1.item from t t1
left join t t2
on t1.GroupNumber = t2.GroupNumber+1
left join t t3
on t2.GroupNumber = t3.GroupNumber+1
where t3.GroupNumber is not null
2 мар 16, 13:58    [18887537]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Преподовтель знаний
Guest
Опять прошел,

Можно еще извратиться - изначально посчитать количество групп и в динамический запрос склеить
Но ТС, видимо, такими знаниями не обладает
2 мар 16, 14:23    [18887706]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20609
Опять прошел
left join t t3
on t2.GroupNumber = t3.GroupNumber+1
where t3.GroupNumber is not null

Мне чёта кажется, что получился INNER JOIN.
2 мар 16, 14:29    [18887742]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Joiner2
Guest
Akina,

В данном контексте JOIN не важен
То есть не имеет значения, с какой стороны клеиться

Важно выбрать результат
Как-то так
2 мар 16, 14:46    [18887833]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20609
На самом деле я не вижу никаких оснований полагать, что GroupNumber имеет сквозную нумерацию. Посему всё-таки ратую за динамический SQL.
2 мар 16, 14:50    [18887853]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
тупо декартово..

;with t as (select * from
(values 
(300,     1),
(301,     1),
(302 ,    2),
(303 ,    3),
(304 ,    3)) a(item, GroupNumber))

select * from
(select item from t where GroupNumber = 1) a1,
(select item from t where GroupNumber = 2) a2,
(select item from t where GroupNumber = 3) a3
2 мар 16, 15:22    [18888008]     Ответить | Цитировать Сообщить модератору
 Re: Возможно ли средствами MSSQL получить выборку  [new]
Joiner2
Guest
Akina,

Согласен
Лучше изначально сделать список групп, а потом склеить в цикле запрос
Тут не вижу вариантов без курсора для выбора списка групп

Но у ТСа не хватит мозга на это
Раз такие вопросы задает
2 мар 16, 15:42    [18888099]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить