問題を解決しようとしていますが、簡単な解決策が見つからないようです。私は文をいくつかのカウントに基づいて値を返すために文を使用するクエリを記述しようとしています。同じクエリでは、別のクエリでこれによって返されたデータを利用する必要があるため、オーダーIDを返す必要もあります。以下は SQL Serverの場合とgroup byによって返された行がない場合に値を返す
はクエリです:select CASE WHEN count(name) = 0 THEN '1' ELSE CONVERT(varchar,count(name) + 1) END AS box
, orderid
from order
where len(name) = 7
and orderid = 'XYZ'
group by orderid
上記の問題は、あなたが想像できるよう長さ7で名前がデータ内に存在する場合、行のみが返されることです。それに関係なく有効な値を返すためにこのクエリが必要です。
長さ7の名前が存在しない場合、クエリは、1, XYZ
を返します。有効な長さの名前7が存在する場合、クエリは機能します。
この問題を解決するにはどうすればよいでしょうか?データは、長さ7以下の複数の名前を含むことができます。これらの名前は、トランザクションが行われた後に長さ7に変更されます。以下は
サンプルデータと希望する結果である:私はorderid = '1'
のための私のクエリを実行すると
NAME ORDERID
ABC 001
XYZ 001
123 001
OOP 002
LMT 002
、クエリが1, 001
を返す必要があります。データは常に変化していますので、最初は上記のようになりました。取引が行われるように、データのように変更されます。この時点で
NAME ORDERID
ABCABCABC 001
XYZ 001
123 001
OOP 002
LMT 002
それが有効な行を返しますので、私は上記の私のクエリを心配する必要はありません:とき2, 001
問題がありますname列の長さが正しくない場合、クエリは何も返しません。
'JOIN'とおそらくより良いフィルタの必要性の良い指標です。複数の呼び出しを行うよりも、必要なデータを取得するためにdbを1回呼び出す方がはるかに優れています。 – Shawn
残念ながら、上記のテーブル/ロジックが使用されているかのように、フィルタ用に結合することはできません。結合には長さ7の名前がないため行が返されません。これは、データが存在すると解決されますが、その時点までは機能しません。 – Help123
サンプルデータと望ましい結果が実際に役立ちます。 –