子查询返回超过1个值的sql查询错误
我有以下代码。我得到的子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。 从这个查询中。请看下面写的查询子查询返回超过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
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