Sql server 当子查询遵循=、!=、

Sql server 当子查询遵循=、!=、,sql-server,Sql Server,我知道这类问题是重复的,但我没有找到这个问题的准确答案。这就是我为什么要贴它的原因 所以,我的问题是,当我在SQLServer中运行sql查询时,它会显示标题错误。我找到了很多东西,但都没用 我的问题是 select trandate, shortdescr, ref as BillNo, f.companyname, h.brnchname, tranno, AccName, sum(dramount) as NetAmount, sum(SGST) GstA

我知道这类问题是重复的,但我没有找到这个问题的准确答案。这就是我为什么要贴它的原因

所以,我的问题是,当我在SQLServer中运行sql查询时,它会显示标题错误。我找到了很多东西,但都没用

我的问题是

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
请帮我解决这个问题


谢谢。

看来您的子查询

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中的谓词或添加TOP1…ORDER BY。

至少有一个子查询返回超过1行。最有可能的是那里没有排名前1的那个。对于所有其他行,您都有top 1,但没有order by,因此您无法确保获得哪一行。where子句中还有不可争论的谓词,因为您正在将所有日期转换为varchar。为什么不将字符串文字转换为日期,这样就可以利用trandate上的索引?什么是表模式?