用字符串操作查询

时间:2010-08-25 07:39:46

标签: sql-server sql-server-2005

我需要查询以下问题。表1指定了必填输入字段。我将使用inactive ='No'和mandt field ='yes'

获取字段

所以我有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条记录没有我们从上一张表中检索到的所有4个字段(sev,sev1,cde,frt)。

没有。 table1产生的字段可能会有所不同......因为这些是来自表数据...所以我们可能有(sev,sev1,cde,frt ....)

2 个答案:

答案 0 :(得分: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
....

答案 1 :(得分:0)

简短回答:可能你不想尝试。

相反,从表2创建第三个表,其中包含相同的数据,但是您可以使用的形式。这意味着将字段add_fields拆分为列,以便您可以对表Table1使用联接

答案很长:SQL正在巡视完成,因此您可以在其中编写任何程序(mandelbrot set in T-SQL)。但这很快变得复杂,所以你真的不想这样做。