Sql server 其中条件是外部应用的sql查询

Sql server 其中条件是外部应用的sql查询,sql-server,Sql Server,我正在使用sql查询,但很抱歉,无法使用where条件。我把我的问题贴在下面 SELECT * , CAST( RIGHT(FileNo,3) AS numeric) as IntFileNo FROM ExportLcs A OUTER APPLY ( SELECT SUM(ReceivedTTUsd) AS TtTotal, SUM(ReceivedPDCUsd) AS PdcTotal, SUM(CASE WHEN Received

我正在使用sql查询,但很抱歉,无法使用where条件。我把我的问题贴在下面

SELECT * , CAST( RIGHT(FileNo,3) AS numeric) as IntFileNo 
FROM ExportLcs A
    OUTER APPLY (
        SELECT SUM(ReceivedTTUsd) AS TtTotal,
        SUM(ReceivedPDCUsd) AS PdcTotal,
        SUM(CASE WHEN ReceivedPDCUsd > 0 THEN 1 ELSE 0 END) AS PdcCashCount,
        SUM(CASE WHEN ReceivedPDCUsd > 0 THEN ConvertRate ELSE 0 END) AS PdcRateTotal,
        SUM(CASE WHEN ConvertRate > 0 THEN CEILING(ReceivedPDCUsd / ConvertRate) ELSE 0 END) AS PdcTotalUsd,
        Count(ExportLcId) AS TotalPaymentCount
        FROM dbo.ExportPayments G
        WHERE A.ExportLcId = G.ExportLcId AND (G.PdcTotal+G.PdcTotalUsd)>0
    ) AS G
我想使用像这样的条件 A.ExportLcId=G.ExportLcId和(G.PdcTotal+G.PdcTotalUsd)>0 但这一部分不起作用。
任何人都可以帮忙。

用子句代替where怎么样

SELECT * , CAST(RIGHT(FileNo, 3) AS NUMERIC) AS IntFileNo
FROM dbo.ExportLcs AS A
OUTER APPLY (
    SELECT SUM(ReceivedTTUsd) AS TtTotal
        , SUM(ReceivedPDCUsd) AS PdcTotal
        , SUM(CASE WHEN ReceivedPDCUsd > 0 THEN 1 ELSE 0 END) AS PdcCashCount
        , SUM(CASE WHEN ReceivedPDCUsd > 0 THEN ConvertRate ELSE 0 END) AS PdcRateTotal
        , SUM(CASE WHEN ConvertRate > 0 THEN CEILING(ReceivedPDCUsd / ConvertRate) ELSE 0 END) AS PdcTotalUsd
        , COUNT(ExportLcId) AS TotalPaymentCount
    FROM dbo.ExportPayments AS G
    WHERE A.ExportLcId = G.ExportLcId
    HAVING (SUM(ReceivedPDCUsd) + SUM(CASE WHEN ConvertRate > 0 THEN CEILING(ReceivedPDCUsd / ConvertRate) ELSE 0 END)) > 0
) AS G;

您应该考虑使用外部连接,因此尝试以下内容:

SELECT * , CAST( RIGHT(FileNo,3) AS numeric) as IntFileNo from ExportLcs A left outer join
(
SELECT SUM(ReceivedTTUsd) AS TtTotal,
    SUM(ReceivedPDCUsd) AS PdcTotal,
    SUM(CASE WHEN ReceivedPDCUsd > 0 THEN 1 ELSE 0 END) AS PdcCashCount,
    SUM(CASE WHEN ReceivedPDCUsd > 0 THEN ConvertRate ELSE 0 END) AS PdcRateTotal,
    SUM(CASE WHEN ConvertRate > 0 THEN CEILING(ReceivedPDCUsd / ConvertRate) ELSE 0 END) AS PdcTotalUsd,
    Count(ExportLcId) AS TotalPaymentCount
    FROM dbo.ExportPayments) G
    on A.ExportLcId = G.ExportLcId where (G.PdcTotal+G.PdcTotalUsd)>0

把你的部分放在外面

SELECT * , CAST( RIGHT(FileNo,3) AS numeric) as IntFileNo 
FROM Export
    where   (G.PdcTotal+G.PdcTotalUsd)>0Lcs A
    OUTER APPLY (
        SELECT SUM(ReceivedTTUsd) AS TtTotal,
        SUM(ReceivedPDCUsd) AS PdcTotal,
        SUM(CASE WHEN ReceivedPDCUsd > 0 THEN 1 ELSE 0 END) AS PdcCashCount,
        SUM(CASE WHEN ReceivedPDCUsd > 0 THEN ConvertRate ELSE 0 END) AS PdcRateTotal,
        SUM(CASE WHEN ConvertRate > 0 THEN CEILING(ReceivedPDCUsd / ConvertRate) ELSE 0 END) AS PdcTotalUsd,
        Count(ExportLcId) AS TotalPaymentCount
        FROM dbo.ExportPayments G
        WHERE A.ExportLcId = G.ExportLcId
    ) AS G

我认为你不允许在where中使用列别名,试着这样做:
having(SUM(ReceivedPDCUsd)+SUM(CASE WHEN ConvertRate>0,然后天花板(ReceivedPDCUsd/ConvertRate)否则0 END))>0
顺便问一下,你为什么不使用外部连接?@SanjoyDebnath介意告诉我它输出了什么错误吗?不工作是相当模糊的。没有错误,但查询结果不正常。条件不起作用。在本例中,Msg 207,级别16,状态1,第10行的列名“ExportLcId”无效。@SanjoyDebnath,在我使用您提供的列名重新创建查询时,您应该注意列名。