Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хитрый запрос / 7 сообщений из 7, страница 1 из 1
19.03.2001, 17:34
    #32003243
Oleg-A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
Поблема следующая:
Даны группы товаров, сами товары. Товар только в одной группе. В одной группе несколько товаров.
группа 1 (товар 11, товар 12, товар 13 )
группа 2 (товар 21, товар 22)
группа 3 (товар 31)

Хотелось бы как результат Select иметь следующий порядок:
товар 11 группа 1
товар 21 группа 2
товар 31 группа 3
товар 12 группа 1
товар 22 группа 2
товар 13 группа 1
т.е. вначале по первому товару из всех групп, затем по второму и т.д.
Вот бы без курсора и сторетов.
...
Рейтинг: 0 / 0
19.03.2001, 18:48
    #32003248
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
если не смущает, что появиться лишнее поле, то можно примерно так:

select товар_11 as товар, 1 ord from группа_1
union
select товар_21 as товар, 2 ord from группа_2
union
select товар_31 as товар, 3 ord from группа_3
union
select товар_12 as товар, 4 ord from группа_1
union
select товар_22 as товар, 5 ord from группа_2
union
select товар_13 as товар, 6 ord from группа_1
order by ord, товар

Я наверно не понял, какая структура данных, но думаю смысл понятен
...
Рейтинг: 0 / 0
19.03.2001, 21:52
    #32003254
Oleg-A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
Я не вполне корректно описал исходные условия, приношу извинения и исправляю ошибку.
Исх. данные:
Create table #Group ( GroupID Int, GroupName VarChar(20)) -- группы
Create Table #Good (GoodID int, GoodName VarChar (20)) -- товары
Create Table #Prior (PriID Int, PriWeight Int) -- порядок сортировки
Create Table #GroupGoodPri (GroupID Int, GoodID int, PriID int) -- связка

Insert Into #Group (GroupID, GroupName) Values (1, 'Group - 1')
Insert Into #Group (GroupID, GroupName) Values (2, 'Group - 2')
Insert Into #Group (GroupID, GroupName) Values (3, 'Group - 3')

Insert Into #Prior (PriID, PriWeight) Values (1, 10)
Insert Into #Prior (PriID, PriWeight) Values (2, 20)

Insert Into #Good (GoodID, GoodName) Values (10 , 'Good - 11')
Insert Into #Good (GoodID, GoodName) Values (15 , 'Good - 12')
Insert Into #Good (GoodID, GoodName) Values (30 , 'Good - 13')
Insert Into #Good (GoodID, GoodName) Values (5 , 'Good - 21')
Insert Into #Good (GoodID, GoodName) Values (12 , 'Good - 22')
Insert Into #Good (GoodID, GoodName) Values (20 , 'Good - 31')

Insert Into #GroupGoodPri (GroupID, GoodID, PriID) Values (1, 15, 2)
Insert Into #GroupGoodPri (GroupID, GoodID, PriID) Values (1, 30, 1)
Insert Into #GroupGoodPri (GroupID, GoodID, PriID) Values (1, 10, 1)
Insert Into #GroupGoodPri (GroupID, GoodID, PriID) Values (2, 5, 2)
Insert Into #GroupGoodPri (GroupID, GoodID, PriID) Values (2, 12, 1)
Insert Into #GroupGoodPri (GroupID, GoodID, PriID) Values (3, 20, 1)

пример запроса:
select
GoodName, GroupName, PriWeight
from
#Good G, #Group Gr, #Prior P, #GroupGoodPri L
Where
L.GoodID = G.GoodID And L.GroupID = Gr.GroupID And L.PriID = P.PriID
Order By
Gr. GroupID, P.PriID

ОЧЕНЬ ХОТЕЛОСЬ БЫ ПОЛУЧИТЬ:
GoodName GroupName PriWeight
-------------------- -------------------- -----------
Good - 11 Group - 1 10
Good - 22 Group - 2 10
Good - 31 Group - 3 10

Good - 13 Group - 1 10
Good - 21 Group - 2 20

Good - 12 Group - 1 20
...
Рейтинг: 0 / 0
20.03.2001, 10:06
    #32003258
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
Долго я смотрел на таблицу, которую вам хотелось бы получить, но так и не понял принципа сортировки.
Мне кажется если бы Вы смогли его сформулировать словами, то и запрос сами бы написали.

Или может опишите конкретную задачу, чтобы можно было понять что же нужно.
...
Рейтинг: 0 / 0
20.03.2001, 10:44
    #32003259
Oleg-A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
задачка сводится к следующему:
- в каждой группе отсортировать товары по приоритету
Good-11 Group-1 10 (*1*)
Good-13 Group-1 10 (*2*)
Good-12 Group-1 20 (*3*)

Good-22 Group-2 10 (*1*)
Good-21 Group-2 20 (*2*)

Good-31 Group-3 10 (*1*)

- в результирующий набор должны попасть товары, в след. порядке:
вначале товары занимающие первые места в группах (*1*), затем (*2*), далее (*3*), и т.д.
...
Рейтинг: 0 / 0
20.03.2001, 11:41
    #32003260
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
Для простоты пусть порядок в группе определяется GoodID
(лень мне писать всякие связки, а принцип думаю будет понятен)

select * from #GroupGoodPri p
order by
(select count(*) from #GroupGoodPri p1 where p.GroupID=p1.GroupID and p1.GoodID<=p.GoodID),p.GroupID
...
Рейтинг: 0 / 0
21.03.2001, 18:39
    #32003388
Oleg-A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хитрый запрос
Спасибо за идею.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хитрый запрос / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]