SQL新手 - WHERE语法不正确

时间:2016-05-11 20:57:24

标签: sql-server subquery min

 SELECT DISTINCT TOP (100) PERCENT 
     APUI.APCo, APUI.UIMth, APUI.UISeq, APUI.Vendor, APUI.APRef, 
     APUI.InvDate, APUL.Line, APUL.LineType, APUL.Description, 
     APUL.GrossAmt, APUL.Job, APUR.Reviewer, APUL.GLAcct, 
     APUR.ApprvdYN, APUR.Rejected, 
     HQRV.Name, JCJM.Description AS Expr1, APVM.Name AS VenName, 
     APVM.Phone, APUL.MiscAmt, APUR.LoginName, APVM.SortName, 
     APVM.Vendor AS VenID, APUL.Units, APUL.UnitCost, APUL.UM, 
     HQMT.Description AS MAtDescr, APUL.GLCo, 
     APUL.MiscYN, APUI.Notes, APUL.Discount, APUL.SMCostType, 
     APUR.ApprovalSeq, 
     CAST(APUI.APCo AS decimal(10, 4)) + CAST(APUI.UISeq AS decimal(10, 4)) + CAST(APUI.Vendor AS decimal(10, 4)) + CAST(APUL.GrossAmt AS decimal(10, 4)) AS MATCHNUM, 
     CAST(APUI.APCo AS decimal(10, 4)) + CAST(APUI.UISeq AS decimal(10, 4)) + CAST(APUI.Vendor AS decimal(10, 4)) + CAST(APUL.GrossAmt AS decimal(10, 4)) AS MATCHNUM2
FROM            
    dbo.APUI AS APUI 
LEFT OUTER JOIN
    dbo.APUL AS APUL ON APUI.APCo = APUL.APCo 
                        AND APUI.UIMth = APUL.UIMth 
                        AND APUI.UISeq = APUL.UISeq 
LEFT OUTER JOIN
    dbo.APVM AS APVM ON APUI.VendorGroup = APVM.VendorGroup 
                        AND APUI.Vendor = APVM.Vendor 
LEFT OUTER JOIN
    dbo.APUR AS APUR ON APUL.APCo = APUR.APCo 
                        AND APUL.UIMth = APUR.UIMth 
                        AND APUL.UISeq = APUR.UISeq 
                        AND APUL.Line = APUR.Line 
LEFT OUTER JOIN
    dbo.JCJM AS JCJM ON APUL.JCCo = JCJM.JCCo 
                        AND APUL.Job = JCJM.Job 
LEFT OUTER JOIN
    dbo.HQMT AS HQMT ON APUL.MatlGroup = HQMT.MatlGroup  
                        AND APUL.Material = HQMT.Material 
LEFT OUTER JOIN
    dbo.HQRV AS HQRV ON APUR.Reviewer = HQRV.Reviewer
GROUP BY 
    APUI.APCo, APUI.UIMth, APUI.UISeq, APUI.Vendor, APUI.APRef, 
    APUI.InvDate, APUL.Line, APUL.LineType, APUL.Description, 
    APUL.GrossAmt, APUL.Job, APUR.Reviewer, APUL.GLAcct, APUR.ApprvdYN, 
    APUR.Rejected, HQRV.Name, JCJM.Description, APVM.Name, APVM.Phone, 
    APUL.MiscAmt, APUR.LoginName, APVM.SortName, APVM.Vendor, APUL.Units, 
    APUL.UnitCost, APUL.UM, HQMT.Description, APUL.GLCo, APUL.MiscYN, 
    APUI.Notes, APUL.Discount, APUL.SMCostType, APUR.ApprovalSeq, 
    CAST(APUI.APCo AS decimal(10, 4)) + CAST(APUI.UISeq AS decimal(10, 4)) + CAST(APUI.Vendor AS decimal(10, 4)) + CAST(APUL.GrossAmt AS decimal(10, 4))
 WHERE 
     ApprovalSeq = (SELECT MIN(ApprovalSeq) AS hasball
                    FROM dbo.XS_Unapproved_Inv_Current_Approver 
                    WHERE (MATCHNUM = MATCHNUM2))

I am getting this error

我正在尝试在字段'MatchNum'

中返回每个组的最小数字

我一直在为此工作,请在我疯了之前帮忙!

以下是结果的屏幕截图。我试图以红色

返回记录

enter image description here

3 个答案:

答案 0 :(得分:1)

在你的陈述结尾处

你需要一个右括号:

WHERE ApprovalSeq = (
      SELECT  min(ApprovalSeq) AS hasball
      From dbo.XS_Unapproved_Inv_Current_Approver 
      Where (MATCHNUM = MATCHNUM2)
)

答案 1 :(得分:1)

按WHERE子句

移动组
SELECT DISTINCT 
    TOP (100) PERCENT APUI.APCo, APUI.UIMth, APUI.UISeq, APUI.Vendor, APUI.APRef, APUI.InvDate, APUL.Line, APUL.LineType, APUL.Description, APUL.GrossAmt, 
    APUL.Job, APUR.Reviewer, APUL.GLAcct, APUR.ApprvdYN, APUR.Rejected, HQRV.Name, JCJM.Description AS Expr1, APVM.Name AS VenName, APVM.Phone, 
    APUL.MiscAmt, APUR.LoginName, APVM.SortName, APVM.Vendor AS VenID, APUL.Units, APUL.UnitCost, APUL.UM, HQMT.Description AS MAtDescr, APUL.GLCo, 
    APUL.MiscYN, APUI.Notes, APUL.Discount, APUL.SMCostType, APUR.ApprovalSeq , CAST(APUI.APCo AS decimal(10, 4)) + CAST(APUI.UISeq AS decimal(10, 
    4)) + CAST(APUI.Vendor AS decimal(10, 4)) + CAST(APUL.GrossAmt AS decimal(10, 4)) AS MATCHNUM, CAST(APUI.APCo AS decimal(10, 4)) 
    + CAST(APUI.UISeq AS decimal(10, 4)) + CAST(APUI.Vendor AS decimal(10, 4)) + CAST(APUL.GrossAmt AS decimal(10, 4)) AS MATCHNUM2
FROM            
    dbo.APUI AS APUI LEFT OUTER JOIN
    dbo.APUL AS APUL ON APUI.APCo = APUL.APCo AND APUI.UIMth = APUL.UIMth AND APUI.UISeq = APUL.UISeq LEFT OUTER JOIN
    dbo.APVM AS APVM ON APUI.VendorGroup = APVM.VendorGroup AND APUI.Vendor = APVM.Vendor LEFT OUTER JOIN
    dbo.APUR AS APUR ON APUL.APCo = APUR.APCo AND APUL.UIMth = APUR.UIMth AND APUL.UISeq = APUR.UISeq AND APUL.Line = APUR.Line LEFT OUTER JOIN
    dbo.JCJM AS JCJM ON APUL.JCCo = JCJM.JCCo AND APUL.Job = JCJM.Job LEFT OUTER JOIN
    dbo.HQMT AS HQMT ON APUL.MatlGroup = HQMT.MatlGroup AND APUL.Material = HQMT.Material LEFT OUTER JOIN
    dbo.HQRV AS HQRV ON APUR.Reviewer = HQRV.Reviewer




WHERE ApprovalSeq = 
(
SELECT  min(ApprovalSeq) AS hasball
From dbo.XS_Unapproved_Inv_Current_Approver 
Where (MATCHNUM = MATCHNUM2))

GROUP BY APUI.APCo, APUI.UIMth, APUI.UISeq, APUI.Vendor, APUI.APRef, APUI.InvDate, APUL.Line, APUL.LineType, APUL.Description, APUL.GrossAmt, APUL.Job, 
APUR.Reviewer, APUL.GLAcct, APUR.ApprvdYN, APUR.Rejected, HQRV.Name, JCJM.Description, APVM.Name, APVM.Phone, APUL.MiscAmt, APUR.LoginName, 
APVM.SortName, APVM.Vendor, APUL.Units, APUL.UnitCost, APUL.UM, HQMT.Description, APUL.GLCo, APUL.MiscYN, APUI.Notes, APUL.Discount, 
APUL.SMCostType, APUR.ApprovalSeq, CAST(APUI.APCo AS decimal(10, 4)) + CAST(APUI.UISeq AS decimal(10, 4)) + CAST(APUI.Vendor AS decimal(10, 4)) 
+ CAST(APUL.GrossAmt AS decimal(10, 4))

答案 2 :(得分:0)

这是一个基于您发布的语法有效的查询。我根本不了解你派生的MatchNum和MatchNum2的重点。

SELECT DISTINCT APUI.APCo
    , APUI.UIMth
    , APUI.UISeq
    , APUI.Vendor
    , APUI.APRef
    , APUI.InvDate
    , APUL.Line
    , APUL.LineType
    , APUL.Description
    , APUL.GrossAmt
    , APUL.Job
    , APUR.Reviewer
    , APUL.GLAcct
    , APUR.ApprvdYN
    , APUR.Rejected
    , HQRV.Name
    , JCJM.Description AS Expr1
    , APVM.Name AS VenName
    , APVM.Phone
    , APUL.MiscAmt
    , APUR.LoginName
    , APVM.SortName
    , APVM.Vendor AS VenID
    , APUL.Units
    , APUL.UnitCost
    , APUL.UM
    , HQMT.Description AS MAtDescr
    , APUL.GLCo
    , APUL.MiscYN
    , APUI.Notes
    , APUL.Discount
    , APUL.SMCostType
    , APUR.ApprovalSeq
    , Cast(APUI.APCo AS DECIMAL(10, 4)) + Cast(APUI.UISeq AS DECIMAL(10, 4)) + Cast(APUI.Vendor AS DECIMAL(10, 4)) + Cast(APUL.GrossAmt AS DECIMAL(10, 4)) AS MATCHNUM
    --, Cast(APUI.APCo AS DECIMAL(10, 4)) + Cast(APUI.UISeq AS DECIMAL(10, 4)) + Cast(APUI.Vendor AS DECIMAL(10, 4)) + Cast(APUL.GrossAmt AS DECIMAL(10, 4)) AS MATCHNUM2
FROM   dbo.APUI AS APUI
LEFT OUTER JOIN dbo.APUL AS APUL ON APUI.APCo = APUL.APCo
                                   AND APUI.UIMth = APUL.UIMth
                                   AND APUI.UISeq = APUL.UISeq
LEFT OUTER JOIN dbo.APVM AS APVM ON APUI.VendorGroup = APVM.VendorGroup
                                   AND APUI.Vendor = APVM.Vendor
LEFT OUTER JOIN dbo.APUR AS APUR ON APUL.APCo = APUR.APCo
                                   AND APUL.UIMth = APUR.UIMth
                                   AND APUL.UISeq = APUR.UISeq
                                   AND APUL.Line = APUR.Line
LEFT OUTER JOIN dbo.JCJM AS JCJM ON APUL.JCCo = JCJM.JCCo
                                   AND APUL.Job = JCJM.Job
LEFT OUTER JOIN dbo.HQMT AS HQMT ON APUL.MatlGroup = HQMT.MatlGroup
                                   AND APUL.Material = HQMT.Material
LEFT OUTER JOIN dbo.HQRV AS HQRV ON APUR.Reviewer = HQRV.Reviewer
WHERE ApprovalSeq = 
    (
        SELECT  min(ApprovalSeq)
        From dbo.XS_Unapproved_Inv_Current_Approver 
        --Where MATCHNUM = MATCHNUM2 Why bother checking this? Those values can't possibly ever not be equal, they are derived from the same expression
    )

- 编辑 -

你在这里真正想做的事情还不是很清楚。这是我在黑暗中的最后一次拍摄。发布时,您需要发布所需的输出。我完全不知道是什么定义了一个" group"在您的数据中,您可能必须调整ROW_NUMBER窗口函数的PARTITION BY子句。如果我理解正确,至少应该让你指出正确的方向。

with SortedValues as
    (
    SELECT
        ROW_NUMBER() over (PARTITION BY APUI.APCo order by APUR.ApprovalSeq) as RowNum
        , APUI.APCo
        , APUI.UIMth
        , APUI.UISeq
        , APUI.Vendor
        , APUI.APRef
        , APUI.InvDate
        , APUL.Line
        , APUL.LineType
        , APUL.Description
        , APUL.GrossAmt
        , APUL.Job
        , APUR.Reviewer
        , APUL.GLAcct
        , APUR.ApprvdYN
        , APUR.Rejected
        , HQRV.Name
        , JCJM.Description AS Expr1
        , APVM.Name AS VenName
        , APVM.Phone
        , APUL.MiscAmt
        , APUR.LoginName
        , APVM.SortName
        , APVM.Vendor AS VenID
        , APUL.Units
        , APUL.UnitCost
        , APUL.UM
        , HQMT.Description AS MAtDescr
        , APUL.GLCo
        , APUL.MiscYN
        , APUI.Notes
        , APUL.Discount
        , APUL.SMCostType
        , APUR.ApprovalSeq
        , Cast(APUI.APCo AS DECIMAL(10, 4)) + Cast(APUI.UISeq AS DECIMAL(10, 4)) + Cast(APUI.Vendor AS DECIMAL(10, 4)) + Cast(APUL.GrossAmt AS DECIMAL(10, 4)) AS MATCHNUM
    FROM   dbo.APUI AS APUI
    LEFT OUTER JOIN dbo.APUL AS APUL ON APUI.APCo = APUL.APCo
                                       AND APUI.UIMth = APUL.UIMth
                                       AND APUI.UISeq = APUL.UISeq
    LEFT OUTER JOIN dbo.APVM AS APVM ON APUI.VendorGroup = APVM.VendorGroup
                                       AND APUI.Vendor = APVM.Vendor
    LEFT OUTER JOIN dbo.APUR AS APUR ON APUL.APCo = APUR.APCo
                                       AND APUL.UIMth = APUR.UIMth
                                       AND APUL.UISeq = APUR.UISeq
                                       AND APUL.Line = APUR.Line
    LEFT OUTER JOIN dbo.JCJM AS JCJM ON APUL.JCCo = JCJM.JCCo
                                       AND APUL.Job = JCJM.Job
    LEFT OUTER JOIN dbo.HQMT AS HQMT ON APUL.MatlGroup = HQMT.MatlGroup
                                       AND APUL.Material = HQMT.Material
    LEFT OUTER JOIN dbo.HQRV AS HQRV ON APUR.Reviewer = HQRV.Reviewer
)

select *
from SortedValues
where RowNum = 1