子查询返回超过1个值的sql查询错误

子查询返回超过1个值的sql查询错误,sql,sql-server,Sql,Sql Server,我有以下代码。我得到的子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。 从这个查询中。请看下面写的查询 SELECT X.ITEMCODE, X.[ITEM_DESCRIPTION], X.[Received], X.[Issues], X.[Project] FROM ( SELECT DISTINCT T0.ItemCode AS ITEMCODE, T0.ItemName

我有以下代码。我得到的子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。 从这个查询中。请看下面写的查询

SELECT X.ITEMCODE,
       X.[ITEM_DESCRIPTION],
       X.[Received],
       X.[Issues],
       X.[Project]
FROM (
    SELECT DISTINCT
        T0.ItemCode AS ITEMCODE,
        T0.ItemName AS [ITEM_DESCRIPTION],
        ISNULL((
            SELECT SUM(T1.[Quantity])
            FROM IGN1 T1
            WHERE T1.[DocDate] BETWEEN '1march2015' AND '1march2015'
                AND T1.WhsCode = 'RecBay'
                AND T1.[ItemCode] = T0.[ItemCode]
        ), 0) AS [Received],
        ISNULL((
            SELECT T1.[Project]
            FROM IGN1 T1
            WHERE T1.[DocDate] BETWEEN '1march2015' AND '1march2015'
                AND T1.WhsCode = 'RecBay'
                AND T1.[ItemCode] = T0.[ItemCode]
        ), 0) AS [Project],
        ISNULL((
            SELECT SUM(CAST(T1.[Quantity] AS INT))
            FROM IGE1 T1
            WHERE T1.DocDate BETWEEN '1march2015' AND '1march2015'
                AND T1.WhsCode = 'RecBay'
                AND T1.[ItemCode] = T0.[ItemCode]
        ), 0) AS [Issues]

    FROM OITM T0
) X

试试这样的-

SELECT DISTINCT
    T0.ItemCode AS ITEMCODE,
    T0.ItemName AS [ITEM_DESCRIPTION],
    ISNULL([Received], 0) AS [Received],
    ISNULL([Project], '') AS [Project],
    ISNULL([Issues], 0) AS [Issues]
FROM OITM T0
OUTER APPLY (
    SELECT
          [Issues] = SUM(CAST(T1.[Quantity] AS INT))
        , [Received] = SUM(T1.[Quantity])
        , [Project] = MAX(T1.[Project])
    FROM IGN1 T1
    WHERE T1.[DocDate] BETWEEN '1march2015' AND '1march2015'
        AND T1.WhsCode = 'RecBay'
        AND T1.[ItemCode] = T0.[ItemCode]
) T1

并提供您的数据集的一个小示例

我可以从您的查询中获得一些信息,并且我可以看出OITM的项目代码与IGN1的项目不是1比1。这就是你犯错误的原因,问题是你想要什么样的结果。 我可以这样做:

    ======================================================
    ItemCode   ItemName   Received    Project    Issues  
    ======================================================
      1           a          c        Unknown     1008
      1           a          c        Unknown1    1008
      1           a          c        Unknown2    1087
如果这是您想要的,您可以将您的子查询转到left join

    select T0.ItemCode,
           T0.ItemName,
           ISNULL(T1.Received,0)as Received,
           ISNULL(T1.Project,0)as Project,
           ISNULL(T1.Issues,0)as Issues
      from (select distinct ItemCode,ItemName from OITM) T0
      left join IGN1 T1 on T1.ItemCode = T0.ItemCode
       where T1.[DocDate] BETWEEN '1march2015' AND '1march2015'
        AND T1.WhsCode = 'RecBay'

您能否尝试以下查询,并告诉我您遇到了什么错误:

;WITH CTE AS
(
    SELECT
        T0.ItemCode AS ItemCode,
        ISNULL(SUM(T1.[Quantity]),0) AS Received,
        ISNULL(T1.[Project], '') AS Project,
        SUM(CAST(T1.[Quantity] AS INT)) AS Issues
    FROM OITM T0
    LEFT JOIN IGN1 T1 ON T1.[ItemCode] = T0.[ItemCode]
    WHERE T1.[DocDate] BETWEEN '1march2015' AND '1march2015'
        AND T1.WhsCode = 'RecBay'
)
SELECT DISTINCT
    T0.ItemCode AS ITEMCODE,
    T0.ItemName AS [ITEM_DESCRIPTION],
    T1.*
FROM OITM T0
LEFT JOIN CTE T1 ON T1.ItemCode = T0.ItemCode

ISNULLSELECT T1。[项目]从IGN1。。。返回多行。一个或多个内部查询返回了错误的行数。那么,查询应该是什么?请在此处进行更改并再次发布查询。我们如何知道?这是你的表格和数据。我们需要更多信息…当我添加类似ISNULL的项目时,会出现错误。选择T1。[Project]从IGN1 T1,其中T1。[DocDate]介于'1march2015'和'1march2015'之间,T1.WhsCode='RecBay'和T1。[ItemCode]=T0。[ItemCode],0作为[Project],我不明白该怎么做。当我删除这个字段的时候。结果出来了。但是我想要这个字段。请在此方面提供帮助。此项目是nvarchar