2016-08-11 18 views
0

私のデータベースには記事があります。例以下の記事、あなたが組み合わせを含めることができます(最後の0.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) 

ためには、今somwhere私のプログラムでは、私はいくつかの特定の記事を取得します。さんが言ってみましょう:

12.3356.1 
12.3356.2 
12.3356.3 

7.31.1 
7.31.2 

私はこれまでやったので、何を:

12.3356.3 
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を切断しています、これらの記事を取得:

この結果、私は私のartikelテーブルを見て、それらの2つのうちの1つから始まるすべての数字を取得しなければなりません。私は、私は、これはのようになりますなステートメントのような必要がありますが、この結果から、好きに言う方法を考える:

select * from artikeltable that nummerfield is like '12.3356.%' or '7.31.%' 

ので、「final」はテーブルから2件の記事に基づいて(この場合)を構築する必要がありますが好きです。 NEEDため

EDIT:

;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

動的クエリが必要です。

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 
    ) 
+0

他にもありますか?私はすべてのtoseクエリを文字列に入れて、アプリケーションに配置してSQL Serverに直接配置しないでください。したがって、declare statmentは使用できません。 –

+0

@JimmyJimm更新しました。 – NEER

+0

あなたは私のメインポストを見ることができます - 私は全体のクエリを置いた - あなたはそれが十分に良いと思いますか? –

0

これは、あなたがやりたいのか?

select * 
from artikeltable 
where nummerfield like '12.3356.%' or nummerfield like '7.31.%'; 
+0

はいしかし、あなたは私のクエリで見ることができる「final」はテーブル内の結果に基づいて構築する必要が好きで、これを試してみてください。この例の例では、「最終的な」表に2つの項目があります(多かれ少なかれ)。したがって、あなたが書いたように、LIKE文が構築されなければなりません。しかし、それを自動的に行う方法は? –

関連する問題