获取错误“当EXISTS未引入子查询时,只能在选择列表中指定一个表达式。”用于比较销售帐户

时间:2015-06-18 13:04:30

标签: sql-server tsql sap

尝试根据销售员工将2列与另外2列进行比较时出现以下错误。

  

当选择列表中只能指定一个表达式时   子查询不是用EXISTS引入的。

我的代码是:

select  T1.CardCode 'BP Code',
        T1.CardName 'BP Name',
        COUNT(T0.DocNum) '# of Orders',
        SUM(T0.DocTotal) 'Total Orders Amt',
        SUM(T0.DOCTOTAL)/COUNT(T0.DOCNUM) 'Avg Order Size',
        (SELECT COUNT(T0.DocNum),
        SUM(T0.DocTotal),
        SUM(T0.DOCTOTAL)/COUNT(T0.DOCNUM)

from    ORDR T0 INNER JOIN OCRD T1 ON T0.CardCode=T1.CardCode

where   T0.DocStatus = 'C'
        AND T0.CANCELED <> 'Y'
        AND T0.DocDate >= '2015-05-26'
        AND T1.SlpCode = '37'

GROUP BY    T1.CardCode,
            T1.CardName) 

from    ORDR T0 INNER JOIN OCRD T1 ON T0.CardCode=T1.CardCode

where   T0.DocStatus = 'C'
        AND T0.CANCELED <> 'Y'
        AND T0.DocDate >= '2015-05-26'
        AND T1.SlpCode <> '37'

GROUP BY    T1.CardCode,
            T1.CardName

我希望将新员工与新员工之间的客户帐户与今年的就业日期进行比较。所以我想要 6 列。

当前账户持有人生成的[订单数量],[总订单金额],[平均订单金额] 3列[订单数量],[总订单金额],[平均订单金额]由销售员工“37”生成。

有关重新排列此代码以实现我正在寻找的任何建议吗?

1 个答案:

答案 0 :(得分:0)

我认为只需查询一次表就足够了:

select  T1.CardCode 'BP Code',
        T1.CardName 'BP Name',
        COUNT(CASE WHEN T1.SlpCode<>'37' THEN T0.DocNum END) '# of Orders',
        SUM(CASE WHEN T1.SlpCode<>'37' THEN T0.DocTotal END) 'Total Orders Amt',
        SUM(CASE WHEN T1.SlpCode<>'37' THEN T0.DOCTOTAL END)/
          COUNT(CASE WHEN T1.SlpCode<>'37' THEN T0.DocNum END) 'Avg Order Size',
        COUNT(CASE WHEN T1.SlpCode='37' THEN T0.DocNum END),
        SUM(CASE WHEN T1.SlpCode='37' THEN T0.DocTotal END),
        SUM(CASE WHEN T1.SlpCode='37' THEN T0.DOCTOTAL END)/
          COUNT(CASE WHEN T1.SlpCode='37' THEN T0.DocNum END),

from    ORDR T0 INNER JOIN OCRD T1 ON T0.CardCode=T1.CardCode

where   T0.DocStatus = 'C'
        AND T0.CANCELED <> 'Y'
        AND T0.DocDate >= '2015-05-26'

GROUP BY    T1.CardCode,
            T1.CardName

您可能还想删除计算此处平均值的列,并执行该处理作为后续步骤,例如:消耗此结果集的代码,这样您就不必处理除零,如果这是一个风险。