2017-09-20 45 views
1

このタイプの質問は重複していますが、 。だから私はそれを投稿します。サブクエリが、=、!=、<, <= , >、> =、またはサブクエリがSQLクエリの式として使用されている場合は、これは許可されていません

私の質問は、SQL ServerでSQL Serverのクエリを実行しているときに、見出しのエラーが表示されることです。私は物事の多くを見つけるが、仕事をしなかった。ここで

select 
    trandate, shortdescr, ref as BillNo, 
    f.companyname, h.brnchname, 
    tranno, AccName, 
    sum(dramount) as NetAmount, sum(SGST) GstAmt, 
    sum(CGST) CstAmt, sum(IGST) IGstAmt, s.SeriesName 
from 
    (select 
     trandate, shortdescr, ref, dramount, CompanyID, 
     brnchid, accountid, refaccountid, tranno, seriesid, 
     case 
      when accountid = (select top 1 gcsysdescription 
           from systemparameters 
           where gcsysvar = 'SGST') 
       then dramount - cramount 
       else 0 
     end as SGST, 
     case 
      when accountid = (select top 1 gcsysdescription 
          from systemparameters 
          where gcsysvar = 'CGST') 
       then dramount - cramount 
       else 0 
     end as CGST, 
     case 
      when accountid = (select top 1 gcsysdescription 
          from systemparameters 
          where gcsysvar = 'IGST') 
       then dramount - cramount 
       else 0 
     end as IGST, 
     case 
      when srno = 1 --=(select top 1 gcsysdescription from systemparameters where gcsysvar='IGST') 
       then (select accmas.accountname 
        from accountdet accdet 
        left outer join accountmaster accmas on accmas.accountid = accdet.accountid 
        where accdet.srno = 1 and accdet.seriesid = 19) 
     end as AccName 
    from 
     accountdet) as abc 
left outer join 
    companymaster F on abc.CompanyID = F.companyid 
left outer join 
    brnchmst H on abc.brnchid = H.brnchid 
left outer join 
    Accountmaster a on abc.accountid=a.accountid 
left outer join 
    SeriesMaster s on abc.SeriesID=s.SeriesID 
where 
    abc.companyid = 37 
    and abc.brnchid in (7, 9, 8, 3, 4) 
    and abc.seriesid = 19 
    and convert(varchar(10), trandate, 112) >= '20170920' 
    and convert(varchar(10), trandate, 112) <= '20180331' 
    and a.EntryType <> 'D' 
    and abc.dramount <> 0 
group by 
    trandate, shortdescr, ref, f.companyname, h.brnchname, tranno, s.seriesname, AccName 

は、この問題を解決するために私を助けてください、私のクエリです。

ありがとうございます。

+1

これらのサブクエリのうち少なくとも1つが複数の行を返しています。おそらくそれはトップ1を持っていないものです。他のすべての場合、トップ1がありますが、順序はありませんので、どの行を取得するかを決める方法がありません。すべての日付をvarcharに変換しているため、where句にnonSARGable述語もあります。代わりに、文字列リテラルを日付に変換して、trandateでインデックスを利用できますか? –

+0

テーブルスキーマとは何ですか? – Amit

答えて

3

あなたのサブクエリ

select accmas.accountname from accountdet accdet LEFT OUTER JOIN accountmaster accmas 
ON accmas.accountid= accdet.accountid where accdet.srno = 1 and accdet.seriesid = 19 

が、時には複数の行を返すようです。述語をwhereに変更するか、TOP(1)...ORDER BYを追加する必要があります。

関連する問題

 関連する問題