在我的数据库中有文章。下面的示例或文章,如您所见,总是有一篇主文章(末尾为.1)可能包含下一个组合(。+ 1)
1st article:
-------------------------------------------------------
12.3356.1 <- main artikel (1)
12.3356.2 <- sub artikel (2)
12.3356.3 <- sub artikel (3)
2nd article:
-------------------------------------------------------
4.641.1 <- main artikel (1)
3rd article:
-------------------------------------------------------
664.6241.1 <- main artikel (1)
664.6241.2 <- sub artikel (2)
664.6241.3 <- sub artikel (3)
664.6241.4 <- sub artikel (4)
4th article:
-------------------------------------------------------
7.31.1 <- main artikel (1)
7.31.2 <- sub artikel (2)
现在我的程序中有一些特定的文章。让我们说:
12.3356.3
7.31.2
现在我要做的就是把它们和所有其余部分关联在同一个数字中,所以在这种情况下结果如下:
12.3356.1
12.3356.2
12.3356.3
7.31.1
7.31.2
所以我到目前为止所做的是:
;WITH cutted_nummers (cut_num) as (select REVERSE(SUBSTRING(REVERSE(Nummer),CHARINDEX('.',REVERSE(Nummer)),len(Nummer))) from T_Artikel),
dist_nums (dist_num) as (select distinct(cut_num) from cutted_nummers),
final (nums) as (select dist_num from dist_nums) select * from final
所以通过这个查询我得到那些文章,然后我从这两篇文章中删除了最后的.digit,所以我进入了决赛桌:
12.3356. (without 3 at the end)
7.31. (without 2 at the end)
现在有了这个结果,我必须查看我的artikel表并获得所有数字,从这两个中的一个开始,这是我不知道该怎么做的事情。我想我需要一些声明,但是如何对这个结果说LIKE,所以这应该是这样的:
select * from artikeltable that nummerfield is like '12.3356.%' or '7.31.%'
所以必须根据来自“最终”的两篇文章构建(在这种情况下)表
编辑需要:
;WITH cutted_nummers (cut_num) as (select REVERSE(SUBSTRING(REVERSE(Nummer),CHARINDEX('.',REVERSE(Nummer)),len(Nummer))) from T_Artikel),
dist_nums (dist_num) as (select distinct(cut_num) from cutted_nummers),
final (nums) as (select dist_num from dist_nums)
SELECT Nummer FROM T_Artikel
WHERE
SUBSTRING(Nummer , 0, LEN(Nummer ) - CHARINDEX(REVERSE(Nummer ), '.', 0)) IN
(
SELECT nums FROM final
)
答案 0 :(得分:0)
这样做你想要的吗?
select *
from artikeltable
where nummerfield like '12.3356.%' or nummerfield like '7.31.%';
答案 1 :(得分:0)
您需要动态查询。
DECLARE @Tmp NVARCHAR(MAX) = ''
SELECT @Tmp = COALESCE(@Tmp, '') + ' nummerfield LIKE ''' + ColumnName + '%'' OR' FROM final
DECLARE @Query NVARCHAR(MAX) = 'select * from artikeltable WHERE ' + LEFT(@Tmp, LEN(@Tmp) - 3)
--SELECT @Query
EXEC sp_executesql @Query
顺便说一下,你也可以找到这种方式。
DECLARE @val NVARCHAR(100) = '12.3356.2'
SELECT SUBSTRING(@val, 0, LEN(@val) + 2 - CHARINDEX('.', REVERSE(@val))) -- 12.3356.
更新
试试这个
SELECT * FROM artikeltable
WHERE
SUBSTRING(nummerfield , 0, LEN(nummerfield ) + 2 - CHARINDEX('.', REVERSE(@val))) IN
(
SELECT * FROM final
)