2016-04-05 2 views
0

У меня есть 2 таблицы, TableA, в которых у меня есть ID и Name столбцыSQL Server - значения CSV против CSV ид

id name 
1 Turret Punch Press 
2 Laser Machine 
3 Press Brake 
4 Other machines 

и Table B, в которых я передаю Id из Table A в качестве значения CSV как этот

id TableACSV 
1 1,2 
2 1,3 

Мой запрос будет что-то вроде

Select 
    id, TableACSV 
from tableB 
where (--here i am having problem with query--) 

Выход я хочу должен быть как этот

id TableACSV 
1 Turret Punch Press,Laser Machine 
2 Turret Punch Press,Press Brake 

Я знаю, что это может быть плохой практикой делать .. но в данный момент мне нужно это ..

+0

Вам также нужен запрос для 'MySQL'? – Squirrel

+0

@Squirrel не только sql-сервер ... я думаю, что я удаляю тег mysql – KanisXXX

+0

Google: 'SQL Server group_concat' – sagi

ответ

0

Использование CSV сплиттер DelimitedSplit8K

; WITH CTE AS 
(
    SELECT b.id, a.name 
    FROM TableB b 
    CROSS APPLY dbo.DelimitedSplit8K(b.TableACSV, ',') c 
    INNER JOIN TableA a on c.Item = a.id 
) 
SELECT DISTINCT c.id, STUFF(d.name, 1, 1, '') AS TableACSV 
FROM CTE c 
    CROSS APPLY 
    (
     SELECT ',' + x.name 
     FROM CTE x 
     WHERE x.id = c.id 
     FOR XML PATH ('') 
    ) d (name) 
+0

В этом случае расщепление струн подобно применению Band-Aid к удару живота. OP должен разделить идентификаторы, присоединиться к источнику поиска, а затем повторно агрегировать значения поиска. В любом случае Аарон Бертран [делает более полное сравнение] (http://sqlperformance.com/2012/07/t-sql-queries/split-strings) различных методов разделения строк. Решение CLR могло бы затруднить непосредственный поиск, избегая последовательности split/join/reaggregate. –

+0

его работа над данным примером .... !!! нужно протестировать мой реальный сценарий ... – KanisXXX

Смежные вопросы