|
|
|
Парсинг и поиск
|
|||
|---|---|---|---|
|
#18+
Всем привет. Бьюсь над проблемой долго. Проблема следующая. Есть таблица, в которой есть столбец вида codes. В нем возможны значения, типа 11,34,23 и т.д. (это в ячейке) По @record_id = record_id можно получить codes. Вопрос: Необходимо для каждой ячейки получить все строки, в которых есть совпадения по коду. Т.е., к примеру record_id codes 1 11,15 2 44,9 3 14,15 4 15,9 5 20,9 6 15,88 Тогда для record_id=3 должны получить строки 1 11,15 6 15,18. Какое "недо" решение я пока придумал. Создаю динамическую таблицу, в ячейках которой будут значения распарсинные по запятой. Дальше в цикле пробегаю по всем ясейкам в этой таблице и сравниваю, есть ли вхождения в основной таблице. Но при каждом шаге выводится новая таблица, и в таком случае просто результат затирается. declare @code varchar(max) = '1719,750' declare @str varchar(max) set @str = (select @CODE) select @str='select ''' + replace(@str, ',', ''' as val union all select ''') + '''' declare @t table(id int identity, val varchar(100)) insert into @t exec (@str) declare @id int = 1 while @id <= (select COUNT(*) from @t ) begin select * from BASE_TABLE bs where bs.CODE LIKE ('%' + (select val from @t where val!='' and id = @id) + '%')) set @id = @id + 1; end Есть ли у кого мысли? Нужно то получить простой select, а не кучу. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2011, 18:19 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37387775&tid=1542066]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
185ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 531ms |

| 0 / 0 |
