как получить разделенные запятыми значения столбца, хранящегося на сервере Sql - PullRequest
2 голосов
/ 27 ноября 2011

как получить значения, разделенные запятыми, хранящиеся в Sql Db, в отдельные значения

например, в sql DB столбец хранится со значениями запятой, как показано ниже,

EligibleGroup

A11,A12,A13
B11,B12,B13

Мне нужно получить

EligibleGroup

A11
A12
A13
B11
B12
...

Я написал запрос, который принесет мне список сотрудников с именем сотрудника и подходящей группой

XXX  A11
YYY  B11
ZZZ  C11

Мне нужно убедиться, что подходящая группа сотрудников (XXX, YYY, ZZZ) попадает в эту

EligibleGroup

A11,A12,A13
B11,B12,B13

и верните мне только эти строки.

Ответы [ 5 ]

1 голос
/ 27 ноября 2011

использовать «определенную пользователем функцию», как показано на рисунке здесь (включая исходный код) - он возвращает разделенные значения в виде «таблицы» (одна строка на значение), которую можно выбрать, например,

select txt_value from dbo.fn_ParseText2Table('A11,A12,A13')

возвращает

A11
A12
A13
0 голосов
/ 27 ноября 2011

Я думаю, что вы можете сделать это следующим образом,

выберите слева ('A11, A12, A13', 3) + SUBSTRING ('A11, A12, A13', charindex (',', 'A11), A12, A13' ), 10)

0 голосов
/ 27 ноября 2011

Я думаю, что вам, возможно, не придется делить ElitableGroup.Вы можете сделать другой способ просто:

select empId
from yourTempEmpTable t1, EligibleGroup t2
where t2.elibigle like '%'+t1.elibigle+'%'

Я думаю, что это должно работать.

0 голосов
/ 27 ноября 2011

Предполагая, что EligibleGroup имеет данные фиксированной длины, вы можете попробовать использовать SUBSTRING следующим образом:

select substring(EligibleGroup,1,3) from @test union all
select substring(EligibleGroup,5,3) from @test union all
select substring(EligibleGroup,9,3) from @test

Это вернет:

A11
A12
A13
B11
B12
...

Вы можете попробовать это в Data Explorer

И если вам нужно проверить, попадает ли сотрудник в какую EligibleGroup, попробуйте следующее:

Select EligibleGroup from test where eligibleGroup like '%A11'
0 голосов
/ 27 ноября 2011

Вы можете использовать подзапрос:

SELECT employee_name, eligible_group 
FROM YourTable 
WHERE eligible_group IN 
        (SELECT SPLIT(EligibleGroup) 
         FROM tblEligibleGroup 
         WHERE <some conditions here>)

Я не верю, что функция «SPLIT» существует в SQL Server, поэтому вам придется либо создать пользовательскую функцию, чтобы справиться с этим, либо вы можете использовать изящный обходной путь, предложенный здесь: Как разделить строка, чтобы я мог получить доступ к элементу x?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...