|
Хитрый запрос
|
|||
---|---|---|---|
#18+
Поблема следующая: Даны группы товаров, сами товары. Товар только в одной группе. В одной группе несколько товаров. группа 1 (товар 11, товар 12, товар 13 ) группа 2 (товар 21, товар 22) группа 3 (товар 31) Хотелось бы как результат Select иметь следующий порядок: товар 11 группа 1 товар 21 группа 2 товар 31 группа 3 товар 12 группа 1 товар 22 группа 2 товар 13 группа 1 т.е. вначале по первому товару из всех групп, затем по второму и т.д. Вот бы без курсора и сторетов. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 17:34 |
|
Хитрый запрос
|
|||
---|---|---|---|
#18+
если не смущает, что появиться лишнее поле, то можно примерно так: 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, товар Я наверно не понял, какая структура данных, но думаю смысл понятен ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 18:48 |
|
Хитрый запрос
|
|||
---|---|---|---|
#18+
Я не вполне корректно описал исходные условия, приношу извинения и исправляю ошибку. Исх. данные: 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 21:52 |
|
Хитрый запрос
|
|||
---|---|---|---|
#18+
Долго я смотрел на таблицу, которую вам хотелось бы получить, но так и не понял принципа сортировки. Мне кажется если бы Вы смогли его сформулировать словами, то и запрос сами бы написали. Или может опишите конкретную задачу, чтобы можно было понять что же нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 10:06 |
|
Хитрый запрос
|
|||
---|---|---|---|
#18+
задачка сводится к следующему: - в каждой группе отсортировать товары по приоритету 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*), и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 10:44 |
|
Хитрый запрос
|
|||
---|---|---|---|
#18+
Для простоты пусть порядок в группе определяется GoodID (лень мне писать всякие связки, а принцип думаю будет понятен) select * from #GroupGoodPri p order by (select count(*) from #GroupGoodPri p1 where p.GroupID=p1.GroupID and p1.GoodID<=p.GoodID),p.GroupID ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 11:41 |
|
|
start [/forum/topic.php?fid=46&msg=32003258&tid=1827154]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
28ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 129ms |
0 / 0 |