2010-08-25 176 views
3

我需要查詢以下問題。表1指定了強制輸入字段。我將獲取字段與不活動='否'和mandt字段='是'查詢字符串操作

所以我有4個記錄與字段爲sev,sev1,cde,frt。

表1:

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 

現在我需要不具有在add_fields,傳入三個以上4個字段的記錄的數據。 輸出應返回以下記錄: - TH-123,TH-345,TH-456,TH-451,TH-900。

這4條記錄並不包含我們從前一個表(sev,sev1,cde,frt)檢索到的所有4個字段。

The no。從表1得到的字段的可能vary..As這些都是從表中的數據......所以我們可以有(SEV,sev1,CDE,FRT ....)

+0

你不能把table2放入第一範式來避免這種類型的問題嗎? – 2010-08-25 07:46:05

+0

@Martin - 如果我正確地理解了你,我有一個名爲特許的table2中的唯一鍵。在這個幫助下,我能夠確定一個獨特的記錄。如果你的意思是將列add_fields分割到不同的字段中。沒有。的字段隨用戶輸入而動態變化。如果我不清楚,請告訴我。 – satya 2010-08-25 07:51:49

+0

不,我的意思是將'add_fields'分成組成項目並將它們存儲爲行。 – 2010-08-25 08:02:01

回答

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似乎包含項目列表。這又包含成對的代碼和是/否的值。我建議如下重構你的table2。這會將其放入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分割爲單獨的列。由於沒有。的字段隨用戶輸入而動態變化。如果他們在I/P屏幕上添加10個字段,那麼我需要10列。根據現在的要求,數字的範圍爲20。 – satya 2010-08-25 08:23:07

+0

您必須將字段拆分爲單獨的**行**,否則它們在連接中無用。這就是馬丁史密斯在回答中所做的事情,並且你看到代碼有多笨拙。 – 2010-08-25 09:21:56