【问题标题】:SQL query returning Subquery returned more than 1 value errorSQL查询返回子查询返回超过1个值错误
【发布时间】:2015-12-20 12:10:36
【问题描述】:

我有以下问题。请先看看那个

select 
    X.ITEMCODE, X.[ITEM_DESCRIPTION], X.[OPENING_BALANCE],   
    X.[SALES], X.[TOTAL_REJECTS], x.[REJECTION_DISEASES]
    (X.[SALES] - X.[TOTAL_REJECTS]) as [PRODUCTION_TOTAL], 
    X. [DOCDATE],
    (X.[OPENING_BALANCE] + (X.[SALES]-X.[TOTAL_REJECTS])) AS [CLOSING_BALANCE]
from
    (SELECT DISTINCT 
         T0.ItemCode AS ITEMCODE, T0.ItemName AS [ITEM_DESCRIPTION],
         ISNULL((SELECT SUM(T1.OnHand)  
                 FROM OITW T1 
                 WHERE T1.WhsCode = 'FGS' 
                   AND T1.ItemCode = T0.ItemCode), 0) AS [OPENING_BALANCE],
         ISNULL((SELECT SUM(T1.[Quantity]) 
                 FROM INV1 T1 
                 WHERE T0.[ItemCode] = T1.[ItemCode]), 0) AS [SALES] , 
         (SELECT T1.[DocDate] FROM INV1 T1 
          WHERE T0.[ItemCode] = T1.[ItemCode]) AS [DOCDATE],
         ISNULL((SELECT SUM(cast(T1.[Quantity] as int))  
                 FROM IGE1 T1 
                 WHERE T0.[ItemCode] = T1.[ItemCode]), 0) AS [TOTAL_REJECTS],
         ISNULL((SELECT T1.[U_RejectionOthers]   
                 FROM IGE1 T1 
                 WHERE T0.[ItemCode] = T1.[ItemCode]), 0) AS [REJECTION_DISEASES]
    from 
        OITM T0 
    where 
        T0.[ItmsGrpCod] in ('104', '121', '122', '123', '124', '125', '126', '127', '129', '130', '134', '135', '136', '139', '140', '141', '142', '143', '144', '145')) X
WHERE 
    X.[OPENING_BALANCE] > 0 OR X.[TOTAL_REJECTS] > 0  OR X.[SALES] > 0

在这段代码中,当我尝试在主 select 语句中添加 X.[DOCDATE]x.[REJECTION_DISEASES] 时,出现以下错误

子查询返回超过 1 个值。这是不允许的,当 子查询遵循 =、!=、、>= 或当子查询用作 一个表达式。

请高手帮帮我。

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    我怀疑sub-query 下面的where 子句中的给定条件返回不止一行

    Isnull((SELECT T1.[u_rejectionothers] 
            FROM   ige1 T1 
            WHERE  T0.[itemcode] = T1.[itemcode]), 0) AS[REJECTION_DISEASES] 
    

    您需要修复where 子句以返回一行或TOP 加上Order by 以返回一行

    修复where 子句。将所有条件放在 where 子句中,您可以通过它在 ige1 表中识别唯一行

    Isnull((SELECT T1.[u_rejectionothers] 
            FROM   ige1 T1 
            WHERE  T0.[itemcode] = T1.[itemcode]
              AND  T1.somecol  = 'XXX'), 0) AS[ REJECTION_DISEASES] 
    

    sub-query 中添加TOP 加上Order by

    Isnull((SELECT TOP 1 T1.[u_rejectionothers] 
            FROM   ige1 T1 
            WHERE  T0.[itemcode] = T1.[itemcode]
            Order by somecol), 0) AS [REJECTION_DISEASES] 
    

    【讨论】:

    • 为什么要在此处添加 top 1 ? @VR46
    • Top 避免子查询返回多行错误。我还提到了另一种更有意义的方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多