将两个查询一起使用

Adding two Queries Together Using

我知道之前有人问过这个问题,但我无法理解。 我有 2 个疑问。一个 return 是评分为 10% 的报价的总和,另一个是评分为 20% 的报价的总和。但是,我正在尝试 return 将两个值加在一起的总和。 到目前为止我的查询是:

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 附近有一个不正确的语法。

有什么想法吗?

使用 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 =  ''

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

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

没有找到总字段,加入table错误

也许你可以试试这个

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

试试这个:

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

您在 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