2010-08-25 5 views
3

Мне нужен запрос для следующей проблемы. В таблице 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).

No. полей в результате table1 могут vary..As эти взяты из данных таблицы ... так что мы можем иметь (SEV, sev1, CDE, FRT ....)

+0

Можете ли вы не поставить таблицу2 в 1-ю нормальную форму, чтобы избежать этой проблемы? –

+0

@Martin - Если я правильно понял вас, у меня есть уникальный ключ в таблице2, названный концессией. С помощью этого я могу идентифицировать уникальную запись. Если вы хотите разбить столбец add_fields на разные поля. Нет. полей динамические с пользовательским вводом. Дайте мне знать, если я не знаю. – satya

+0

Нет. Я имею в виду разбить 'add_fields' на его составные элементы и хранить их как строки. –

ответ

2

Чтобы ответить на исходный вопрос

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, кажется, содержит список предметов. Это, в свою очередь, содержит пары кодов и значения yes/no. Я предлагаю перестроить таблицу2 следующим образом. Это положит его на first normal form.

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

concession code YesNo 
---------------------------- 
TH-123  sev  yes 
TH-123  sev1  no 
TH-123  sev2  yes 
Th-234  sev  yes 
.... 
0

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

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

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

+0

Что касается короткого ответа, я не могу разделить add_fields на indivdual столбцы. Как нет. полей динамические с пользовательским вводом. Если они добавят 10 полей на экран i/p, мне понадобится 10 столбцов. Диапазон номеров до 20 с нынешним требованием. – satya

+0

Вы должны разделить поля на отдельные ** строки **, в противном случае они бесполезны в соединении. Это то, что делает Мартин Смит в своем ответе, и вы видите, насколько громоздкий код. –

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