に確認してください、私はいくつかの規則に基づいてartikel番号を生成する必要があり、そしてこの大会はテーブルから最大数を取得1を追加し、特定の規則
桁
{1 or 2 or 3}.{4 or 5}.{n}
例製品番号の数以下の通りです:
7.1001.1
1.1453.1
3.5436.1
12.7839.1
12.3232.1
13.7676.1
3.34565.1
12.56433.1
247.23413.1
最初の部分はプロデュースに基づいており、すべてのプロデュースは独自の番号を持っています。 Rebook - 12、Nike - 256、Umbro - 3としましょう。
私はこの番号を渡してテーブルをチェックしなければなりません。たとえば、12を渡すと12から始まるすべてを取得する必要があります。
、今何をすべきか3例があるはずです。その後、1001
を取得:
第一CASE:表の行なし
第二のケースは:行があるかどうかわから用ので
は、すでに少なくとも一つがあります:
12.1001.1
とより多くの彼らはのは、言わせている場合:
12.1002.1 12.1003.1 ... 12.4345.1
したがって、次のように収集されるべきです:4346
と5桁が、この製品のためにすでに存在する場合それでは言わせて:10001
第三の場合:
12.1002.1
12.1003.1
...
12.9999.1
はとてもので、次の1 retreivedしなければならないとして、実際には同じ第二が、第2の部分のためにそれrached 9999の場合:
12.1001.1 ... 12.9999.1
は、その後でなければなりません返されました:10001
または
12.1002.1 12.1003.1 ... 12.9999.1 12.10001.1 12.10002.1
のでので、次のいずれかをretreivedする必要があります:10003
あなたは私が
何を意味するか知っているホープすでに何かを始めた。このコードは、それから始まるすべての行を探し、2番目の部分に1を追加するだけで、私はそれらの3つのケースに応じてどのように変更するべきかわかりません。
select parsename(max(nummer), 3) + '.' -- 3 + ltrim(max(cast(parsename(nummer, 2) as int) +1)) -- 5436 -> 5437 + '.1' from tbArtikel where Nummer LIKE '3.%'
あなたのお手伝いをしてください。何か不明な点があれば教えてください。
追加質問:
Using cmd As New SqlCommand("SELECT CASE WHEN r.number Is NULL THEN 1001 WHEN r.number = 9999 THEN 10001 Else r.number + 1 End number FROM (VALUES(@producentNumber)) AS a(art) -- this will search this number within inner query And make case.. LEFT JOIN( -- Get producent (in Like) number And max number Of it (without Like it Get all producent numbers And their max number out Of all SELECT PARSENAME(Nummer, 3) art, MAX(CAST(PARSENAME(Nummer, 2) AS INT)) number FROM tbArtikel WHERE Nummer Like '@producentNumber' + '[.]%' GROUP BY PARSENAME(Nummer, 3) ) r On r.art = a.art", con) cmd.CommandType = CommandType.Text cmd.Parameters.AddWithValue("@producentNumber", producentNumber)
固定幅:000.000000.00000で番号を保存すると、書式がずっと簡単になります。あなたはこれを考えましたか? –
3つの異なるフィールドに3つの部分を格納し、ビュー内の計算フィールドとしてのみ番号を作成する方法はありますか? –
これは顧客が私が必要とするコンベンションです;それに影響を与えることはありません。私はメインポストのように正しいアサイメントだけを実装する必要があります。 –