【问题标题】:Adding two Queries Together Using添加两个查询一起使用
【发布时间】:2019-11-22 03:03:46
【问题描述】:

我知道以前有人问过这个问题,但我无法理解。 我有 2 个查询。一个返回 10% 评级的报价总和,另一个返回 20% 评级的报价总和。但是我试图返回加在一起的两个值的总和。 到目前为止,我的查询是:

SELECT SUM(total) FROM (

SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.10) AS "10%" 
FROM ((dbo.Quotes LEFT OUTER JOIN dbo.QuoteLines ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID) LEFT OUTER JOIN dbo.Followups ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID)    WHERE  dbo.Quotes.qmpClosed  =  0 AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 AND dbo.QuoteLines.UQMLSALESSTAGE  =  1 AND dbo.Followups.cmfStatus  <  3 AND dbo.QuoteLines.qmlResolutionReasonID  =  ''

UNION ALL

SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.20) AS "20%" 
FROM ((dbo.Quotes LEFT OUTER JOIN dbo.QuoteLines ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID) LEFT OUTER JOIN dbo.Followups ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID)    WHERE  dbo.Quotes.qmpClosed  =  0 AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 AND dbo.QuoteLines.UQMLSALESSTAGE  =  2 AND dbo.Followups.cmfStatus  <  3 AND dbo.QuoteLines.qmlResolutionReasonID  =  ''
)a

但显然我在 FROM 附近的语法不正确。

有什么想法吗?

【问题讨论】:

    标签: sql sql-server sum union union-all


    【解决方案1】:

    使用UNION ALL的正确语法是

    SELECT *
    FROM
    (
         SELECT col1, col2 FROM TABLE1
         UNION ALL
         SELECT col1, col2 FROM TABLE2
    ) AS alias
    

    您发布的查询对我来说没有意义,所以不知道如何更正

    您的 2 查询看起来非常相似,只有 UQMLSALESSTAGE 不同。可能这就是你想要的。而且你不需要使用union

    SELECT  SUM(dbo.QuoteLines.UQMLQUOTEVALUE * 
                CASE WHEN dbo.QuoteLines.UQMLSALESSTAGE = 1 THEN 0.10 ELSE 0.20 END) AS Total
    FROM    dbo.Quotes 
            LEFT OUTER JOIN dbo.QuoteLines  ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID
            LEFT OUTER JOIN dbo.Followups   ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID
    WHERE   dbo.Quotes.qmpClosed  =  0 
    AND     dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  = -1 
    AND     dbo.QuoteLines.UQMLSALESSTAGE       IN ( 1 , 2 )
    AND     dbo.Followups.cmfStatus             <  3 
    AND     dbo.QuoteLines.qmlResolutionReasonID =  ''
    

    【讨论】:

    • 谢谢,这没有显示错误,但只给了我第一个查询的值。
    • 您需要在问题中包含一些示例数据和预期结果,并解释所需的逻辑或计算以得出所需的结果。事实上,我们不知道您想要什么,只能帮助解决您的语法错误
    • 你是个天才!解决了非常感谢!我什至无法形容我现在有多么轻松。
    【解决方案2】:

    您的脚本有问题。请尝试以下脚本-

    SELECT SUM(total) FROM (
        SELECT
        SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.10) AS total
        FROM dbo.Quotes 
        LEFT OUTER JOIN dbo.QuoteLines 
            ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID
        LEFT OUTER JOIN dbo.Followups 
            ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID    
        WHERE  dbo.Quotes.qmpClosed  =  0 
        AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 
        AND dbo.QuoteLines.UQMLSALESSTAGE  =  1 
        AND dbo.Followups.cmfStatus  <  3 
        AND dbo.QuoteLines.qmlResolutionReasonID  =  ''
    
        UNION ALL
    
        SELECT
        SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.20) AS total 
        FROM dbo.Quotes 
        LEFT OUTER JOIN dbo.QuoteLines 
            ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID 
        LEFT OUTER JOIN dbo.Followups 
            ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID    
        WHERE  dbo.Quotes.qmpClosed  =  0 
        AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 
        AND dbo.QuoteLines.UQMLSALESSTAGE  =  2 
        AND dbo.Followups.cmfStatus  <  3 
        AND dbo.QuoteLines.qmlResolutionReasonID  =  ''
    )a
    

    【讨论】:

    • 谢谢 mkRabbani,这现在没有显示错误,但只显示了第一个查询的值?不是两者的总和。
    【解决方案3】:

    没有找到总字段,连接表错误

    也许你可以试试这个

    SELECT SUM(total) FROM (
    
    SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.10) total 
    FROM ((select dbo.QuoteLines.UQMLQUOTEVALUE from dbo.Quotes LEFT OUTER JOIN dbo.QuoteLines ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID) LEFT OUTER JOIN dbo.Followups ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID)   WHERE  dbo.Quotes.qmpClosed  =  0 AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 AND dbo.QuoteLines.UQMLSALESSTAGE  =  1 AND dbo.Followups.cmfStatus  <  3 AND dbo.QuoteLines.qmlResolutionReasonID  =  ''
    
    UNION ALL
    
    SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.20) total
    FROM ((select dbo.QuoteLines.UQMLQUOTEVALUE from dbo.Quotes LEFT OUTER JOIN dbo.QuoteLines ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID) LEFT OUTER JOIN dbo.Followups ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID)    WHERE  dbo.Quotes.qmpClosed  =  0 AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 AND dbo.QuoteLines.UQMLSALESSTAGE  =  2 AND dbo.Followups.cmfStatus  <  3 AND dbo.QuoteLines.qmlResolutionReasonID  =  ''
    )a
    

    【讨论】:

      【解决方案4】:

      试试这个:

      SELECT SUM(total) FROM (
      select 
      SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.10) AS "total" 
      From dbo.Quotes LEFT OUTER JOIN dbo.QuoteLines ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID
      LEFT OUTER JOIN dbo.Followups ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID    WHERE  dbo.Quotes.qmpClosed  =  0 
      AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 AND dbo.QuoteLines.UQMLSALESSTAGE  =  1 AND dbo.Followups.cmfStatus  <  3 AND dbo.QuoteLines.qmlResolutionReasonID  =  ''
      
      UNION ALL
      select 
      SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.20) AS "total" 
      FROM dbo.Quotes LEFT OUTER JOIN dbo.QuoteLines ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID
      LEFT OUTER JOIN dbo.Followups ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID  
      WHERE  dbo.Quotes.qmpClosed  =  0 AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 AND dbo.QuoteLines.UQMLSALESSTAGE  =  2 AND dbo.Followups.cmfStatus  <  3 AND dbo.QuoteLines.qmlResolutionReasonID  =  ''
      )a
      

      【讨论】:

        【解决方案5】:

        FROM ()a 中的代码不完整。您可以尝试提取该代码并自行运行它。例如:

        SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.10) AS "10%" 
        FROM ((dbo.Quotes LEFT OUTER JOIN dbo.QuoteLines ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID) LEFT OUTER JOIN dbo.Followups ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID)    WHERE  dbo.Quotes.qmpClosed  =  0 AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 AND dbo.QuoteLines.UQMLSALESSTAGE  =  1 AND dbo.Followups.cmfStatus  <  3 AND dbo.QuoteLines.qmlResolutionReasonID  =  ''
        
        UNION ALL
        
        SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.20) AS "20%" 
        FROM ((dbo.Quotes LEFT OUTER JOIN dbo.QuoteLines ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID) LEFT OUTER JOIN dbo.Followups ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID)    WHERE  dbo.Quotes.qmpClosed  =  0 AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 AND dbo.QuoteLines.UQMLSALESSTAGE  =  2 AND dbo.Followups.cmfStatus  <  3 AND dbo.QuoteLines.qmlResolutionReasonID  =  ''
        

        该代码无法单独运行,因为缺少 SELECT。如果你解决了这个问题,然后将代码重新插入FROM ()a,那么我认为你的状态会很好。例如:

        SELECT SUM(total) FROM (
        SELECT
        SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.10) AS "10%" 
        FROM ((dbo.Quotes LEFT OUTER JOIN dbo.QuoteLines ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID) LEFT OUTER JOIN dbo.Followups ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID)    WHERE  dbo.Quotes.qmpClosed  =  0 AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 AND dbo.QuoteLines.UQMLSALESSTAGE  =  1 AND dbo.Followups.cmfStatus  <  3 AND dbo.QuoteLines.qmlResolutionReasonID  =  ''
        
        UNION ALL
        SELECT
        SUM(dbo.QuoteLines.UQMLQUOTEVALUE*0.20) AS "20%" 
        FROM ((dbo.Quotes LEFT OUTER JOIN dbo.QuoteLines ON dbo.Quotes.qmpQuoteID = dbo.QuoteLines.qmlQuoteID) LEFT OUTER JOIN dbo.Followups ON dbo.QuoteLines.qmlQuoteID = dbo.Followups.cmfQuoteID)    WHERE  dbo.Quotes.qmpClosed  =  0 AND dbo.Quotes.UQMPFORWARDEDTOCUSTOMER  =  -1 AND dbo.QuoteLines.UQMLSALESSTAGE  =  2 AND dbo.Followups.cmfStatus  <  3 AND dbo.QuoteLines.qmlResolutionReasonID  =  ''
        )a
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-05-15
          • 1970-01-01
          • 2021-05-02
          • 1970-01-01
          • 1970-01-01
          • 2015-10-08
          • 1970-01-01
          相关资源
          最近更新 更多