1

私はSQL Serverの初心者です

SAP B1 での私のクエリは

  DECLARE @FROMDATE AS DATETIME
  SET @FROMDATE= [%0]

  DECLARE @TODATE AS DATETIME
  SET @TODATE= [%1]

  DECLARE @ACCNUM AS NVARCHAR(100)
  SET @ACCNUM= [%2]

アカウントのすべてのトランザクションのアカウント名、番号を取得する

   SELECT 
   T4.[ACCOUNT] AS 'A/C NUM',
   T4.[ACCTNAME] AS 'A/C NAME',
   T4.[TransId] AS 'KEY',

   SUM(VEL_DB) AS 'VEL DB',
   SUM(VEL_CR) AS 'VEL CR',

   SUM(DEF_DB) AS 'DEF_DB',
   SUM(DEF_CR) AS 'DEF CR',
   T4.[LINEMEMO],
   T1.[U_Naaration]


   FROM OJDT T1 

ocrcode2のクレジットとデビットに応じて、アカウント内のすべてのトランザクションに対して計算されます

   INNER JOIN 
      (
     SELECT T2.[TRANSID],T2.[ACCOUNT],T3.[ACCTNAME],T2.[LINEMEMO],

     case
     when T2.[OcrCode2]='VEL'
     THEN
       (T2.[Debit]) 
     ELSE
       NULL
     END as VEL_DB,

    case
    when T2.[OcrCode2]='VEL'
    THEN
     (T2.[CREDIT]) 
    ELSE
     NULL
    END as VEL_CR,

   case
   when T2.[OcrCode2]='' OR T2.[OCRCODE2] IS NULL
   THEN
     (T2.[Debit]) 
   ELSE
     NULL
   END as DEF_DB,

   case
   when T2.[OcrCode2]='' OR T2.[OCRCODE2]IS NULL
   THEN
       (T2.[CREDIT]) 
   ELSE
     NULL
   END as DEF_CR


   FROM JDT1 T2 
      INNER JOIN OACT T3 ON T3.[ACCTCODE]=T2.[ACCOUNT]
    where T2.[DUEDATE]>=@FROMDATE AND T2.[DUEDATE]<=@TODATE ) 
    T4 ON T4.TRANSID = T1.TRANSID AND T4.[ACCOUNT]=@ACCNUM


  GROUP BY T4.[TransId] ,T1.[U_Naaration],T4.[ACCTNAME],T4.[ACCOUNT],T4.[LINEMEMO]

   FOR BROWSE

エラーが発生します

選択するテーブルを選択する必要があります

4

1 に答える 1

0

ここのPetr Verner による正解に従って、サブクエリを使用しないようにクエリを書き直す必要がある場合があります。

答えは、オプションの提案にも続きます。

  1. クエリをストアド プロシージャに埋め込み、代わりにその SP を呼び出します。

  2. ビューを使用します。(サブクエリ部分またはクエリ全体に使用できます)。

  3. サブクエリの結果をテーブル変数 (または一時テーブル) に格納し、保存した結果セットをメイン クエリで使用します。

于 2012-07-05T12:28:36.690 に答える