【解決方法】ストアドプロシージャでサブクエリを使用するには?


私のサブクエリは単一の値を返し、その値はカンマで区切られた複数の値で構成されています。
私のサブクエリは次のようなものです:-

SQL
select ApplGLCd from ebreportstructureho
where grpname = 'Appendix'

出力は次のとおりです:-0034,0035,0064,0026,0030,0031,0056

ストアドプロシージャでサブクエリを使用すると、エラーは発生しませんが、残念ながら発生しないデータが返されるはずです。

私が試したこと:

SQL
SELECT date,SUM(clcr-cldr) AS ClosingCr FROM ebgltransaction  
WHERE brncd='0002' AND glcd IN (select ApplGLCd from ebreportstructureho
where grpname = 'Appendix') AND date BETWEEN '20151001' AND '20151031'
GROUP BY date
ORDER BY date

解決策 1

コードを 2 つの部分に分割する必要があります。 最初に、サブクエリの返された結果を分割してテーブル変数に入力し、2 番目の部分でこのテーブル変数を使用して結果を取得します。 擬似コードは次のようになります

SQL
DECLARE @TBL TABLE
( 
   GL_ID VARCHAR(100)
) 

INSERT INTO @TBL (GL_ID)
SELECT Item 
FROM   (select ApplGLCd from ebreportstructureho
where grpname = 'Appendix') T CROSS APPLY dbo.SplitStrings_Moden(T.ApplGLCd,',')

SELECT date,SUM(clcr-cldr) AS ClosingCr 
FROM ebgltransaction 
     INNER JOIN @TBL T ON ebgltransaction.glcd = T.GL_ID
WHERE brncd='0002' 
AND date BETWEEN '20151001' AND '20151031'
GROUP BY date
ORDER BY date

分割機能については以下を参照してください
文字列を正しい方法で分割する – または次善の方法[^]

解決策 2

後続または先頭のジャンク データまたはスペースがいくつかあるはずです。データが要件に従っているかどうかを確認してください

コメント

タイトルとURLをコピーしました