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

Откуда: Армения, Ереван
Сообщений: 101
имеется Table1 c 1 столбцом Col1
col1
---
abc
d14
p25
f458
45d

В строковой переменной задается порядок сортировки

1 d14
2 45d
3 f458
4 abc
5 p25

как можно результат Select * from table1 отсортировать согласно порядку в строковой переменной?
10 ноя 12, 18:08    [13451755]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в текстовом файле или в STRING  [new]
qwerty112
Guest
AVRob
В строковой переменной задается порядок сортировки

например ?
10 ноя 12, 18:14    [13451767]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в текстовом файле или в STRING  [new]
qwerty112
Guest
AVRob
В строковой переменной задается порядок сортировки

1 d14
2 45d
3 f458
4 abc
5 p25


как можно результат Select * from table1 отсортировать согласно порядку в строковой переменной?

вот это (выделено) - значение в строковой переменной ?
10 ноя 12, 18:17    [13451772]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в текстовом файле или в STRING  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
qwerty112,

порядок сортировки может быть задан например

1 d14
2 45d
3 f458
4 abc
5 p25

так

или

1 d14,2 45d,3 f458,4 abc,5 p25
10 ноя 12, 18:22    [13451781]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в текстовом файле или в STRING  [new]
qwerty112
Guest
AVRob
qwerty112,

порядок сортировки может быть задан например

1 d14
2 45d
3 f458
4 abc
5 p25


так

или

1 d14,2 45d,3 f458,4 abc,5 p25

это - значение в строковой переменной ??
"на кой" тогда тебе таблица ? эту переменную распарсь (или через хмл, например), и верни
10 ноя 12, 18:28    [13451791]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в текстовом файле или в STRING  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
qwerty112,
имеем таблицу
Table1 c несколькими столбцами.

В столбце Col1 имеем
col1
---
abc
d14
p25
f458
45d

Нам нужно сортировать результат
Select * from table1
order by <требуется найти>

порядок сортировки задается в строке

1 d14,2 45d,3 f458,4 abc,5 p25 (т.е. в результате Select мы должны получить таблицу, в которой на первой строке "d14", на второй - "45d" и на последней строке "p25")

Формат строки задаем мы, и можем выбрать любой для решения задачи.
вместо 1 d14,2 45d,3 f458,4 abc,5 p25 можно задать
и d14,45d,f458,abc,p25
10 ноя 12, 19:44    [13452066]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в текстовом файле или в STRING  [new]
qwerty112
Guest
AVRob
имеется Table1 c 1 столбцом Col1
col1
---

AVRob
qwerty112,
имеем таблицу
Table1 c несколькими столбцами.

шо жж ты такой непостоянный, дружище ?

---------

declare @xml xml
set @xml = (select cast('<root><row a="'+replace(replace(@order, ' ', '" b="'), char(13)+char(10), '" /><row a="')+'" /></root>' as xml)) 

select t1.* , t.c.value('@a', 'varchar(10)') as [a], t.c.value('@b', 'varchar(10)') as [b]
from @xml.nodes('/root/row')as t(c)
inner join @t t1
	on t1.col1=t.c.value('@b', 'varchar(10)')
order by t.c.value('@a', 'varchar(10)') 

col1                 a          b
-------------------- ---------- ----------
d14                  1          d14
45d                  2          45d
f458                 3          f458
abc                  4          abc
p25                  5          p25
10 ноя 12, 20:05    [13452158]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в текстовом файле или в STRING  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
qwerty112,
Спасибо

Начинаю разбираться ))
10 ноя 12, 20:09    [13452182]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в текстовом файле или в STRING  [new]
qwerty112
Guest
AVRob
Формат строки задаем мы, и можем выбрать любой для решения задачи.
вместо
1 d14,2 45d,3 f458,4 abc,5 p25
можно задать и d14,45d,f458,abc,p25

нуу, тогда так можно
select t1.* , charindex(','+t1.col1+',', ','+'d14,45d,f458,abc,p25'+',') as xz
from  @t t1
order by charindex(','+t1.col1+',', ','+'d14,45d,f458,abc,p25'+',')

col1                 xz
-------------------- -----------
d14                  1
45d                  5
f458                 9
abc                  14
p25                  18
10 ноя 12, 20:18    [13452211]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в текстовом файле или в STRING  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
qwerty112,

declare @order NVARCHAR(200)
set @order='1 p18, 2 p2, 3 p41'
declare @xml xml
set @xml = (select cast('<root><row a="'+replace(replace(@order, ' ', '" b="'), char(13)+char(10), '" /><row a="')+'" /></root>' as xml)) 

select t1.* , t.c.value('@a', 'varchar(10)') as [a], t.c.value('@b', 'varchar(10)') as [b]
from @xml.nodes('/root/row')as t(c)
inner join @t t1
	on t1.col1=t.c.value('@b', 'varchar(10)')
order by t.c.value('@a', 'varchar(10)')


не получается пока
получаю ошибку

Must declare the table variable "@t".
10 ноя 12, 21:22    [13452462]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в текстовом файле или в STRING  [new]
qwerty112
Guest
AVRob
не получается пока
получаю ошибку

Must declare the table variable "@t".

вместо @t должна быть твоя Table1,
и я делал для этого варианта
автор
1 d14
2 45d
3 f458
4 abc
5 p25

т.е. - с переносом строки,
а у тебя сейчас
автор
'1 p18, 2 p2, 3 p41'

запятая да ещё и с пробелом
тогда так нужно было бы
set @xml = (select cast('<root><row a="'+replace(replace(replace(@order, ' ', '-'), ',-', '" /><row a="'), '-', '" b="')+'" /></root>' as xml)) 


..и вообще, там же по-проще вариант я потом выложил ...
10 ноя 12, 21:41    [13452589]     Ответить | Цитировать Сообщить модератору
 Re: Сортировать результат SELECT по информации в текстовом файле или в STRING  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
qwerty112,

Спасибо!!!

получились оба варианта .

только есть разница в результатах - если какого-то значения
столбца col1 нет в строке order, то в первом варианте эта строка
не включается в результат

Так
1-ый вариант - order='1 p18,2 p2,3 p41'

результат

col1	a	b
---------------------
p2 1 p2
p18 2 p18
p41 3 p41
p41 3 p41
p41 3 p41

2-ой вариант
col1	xz
--------------
p134 0
p160 0
p2 2
p18 5
p41 9
p41 9
p41 9

В первом варианте строки p134 и p160 не включились в результат,

2-ой вариант выдает более полную информацию.

Спасибо большое еще раз
10 ноя 12, 23:23    [13453132]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить