запрос со строковыми манипуляциями - PullRequest
3 голосов
/ 25 августа 2010

Мне нужен запрос для следующей проблемы. В таблице 1 указаны обязательные поля ввода. Я получу поля с неактивным = 'Нет' и полем мандата = 'да'

Итак, у меня есть 4 записи с полями как sev, sev1, cde, frt.

Table1:

Fields                 Inactive              mandt_field

sev                     no                      yes
sev1                    no                      yes
sev2                    yes                     yes
abd                     no                       no
cde                     no                      yes
frt                     no                      yes

Таблица 2 содержит данные, аналогичные этим

concession           add_fields

TH-123               -sev*yes-sev1*no-sev2*yes
Th-234               -sev*yes-sev1*yes-cde*yes-frt*no
Th-345               -sev*yes-cde*yes-frt*no
TH-456               -cde*no-frt*no
Th-012               -sev*no-sev1*no-cde*no-frt*no
Th-451               -frt*yes
TH-900               -sev2*no

Теперь мне нужны записи, в которых нет 4 полей в add_fields. выходные данные должны возвращать следующие записи: - TH-123, Th-345, TH-456, Th-451, TH-900.

Эти 4 записи не имеют всех 4 полей, которые мы извлекли из предыдущей таблицы (sev, sev1, cde, frt).

Нет. полей, полученных из таблицы1, могут различаться. Как это из данных таблицы ... поэтому мы можем иметь (sev, sev1, cde, frt ....)

Ответы [ 2 ]

2 голосов
/ 25 августа 2010

Чтобы ответить на ваш первоначальный вопрос

SELECT DISTINCT concession
FROM Table2
INNER JOIN Table1 ON Table2.add_fields NOT LIKE '%-' + Table1.Fields + '*%'
WHERE Inactive='no' AND mandt_field='yes'

Следуя комментариям, хотя add_fields, кажется, содержит список пунктов.Это, в свою очередь, содержит пары кодов и значения да / нет.Я предлагаю реструктурировать вашу таблицу2 следующим образом.Это поместит его в первую нормальную форму .

Если поместить его в первую нормальную форму, произойдет обновление и поиск будет проще без необходимости разбирать каждую строку каждый раз, чтобы разбить ее на составляющие элементы.Это также позволит вам применять ограничения целостности к вашим данным.

concession    code    YesNo
----------------------------
TH-123        sev       yes
TH-123        sev1      no
TH-123        sev2      yes
Th-234        sev       yes
....
0 голосов
/ 25 августа 2010

Краткий ответ: Возможно, но вы не хотите пытаться.

Вместо этого создайте третью таблицу из таблицы два, которая содержит те же данные, но в форме, которую вы можете использовать.Это означает разделить поле add_fields на столбцы, чтобы вы могли использовать объединение с таблицей Table1

Длинный ответ: SQL завершает работу, поэтому вы можете написать в нем любую программу ( mandelbrot setв T-SQL ).Но это быстро становится сложным, так что вы действительно не хотите этого делать.

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