我在存储过程中编写子查询以获取存储为varchar数据类型的Orders之间的值。当我运行查询时,它显示:
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
我搜索了一下,发现问题是因为在子查询中返回的值超过1。
但在我的情况下,我需要在给定输入之间的所有值。任何人都能告诉我我能以什么方式实现这一目标。
代码:
SELECT ROW_NUMBER()OVER(
ORDER BY po.id) AS SNo ,
pd.Copies AS Quantity,
pd.EstUnitPrice AS UniPrice,
pd.Copies*pd.EstUnitPrice AS Total,
(SELECT value
FROM BibContents
WHERE bibid=pd.BibId
AND sfld='a'
AND tagno='245') AS Title,
(SELECT value
FROM BibContents
WHERE bibid=pd.BibId
AND sfld='a'
AND tagno='020') AS 'ISSN/ISBN',
(SELECT value
FROM BibContents
WHERE bibid=pd.BibId
AND sfld='a'
AND tagno='100')AS Author
FROM [VibrantMas].[dbo].[PoDetails] AS pd
INNER JOIN Porders AS po ON po.Id=pd.PoId
WHERE po.No BETWEEN '000021' AND '000024'
答案 0 :(得分:2)
BETWEEN
不是BibContents
抛出错误而是SELECT value
上的一个子选择。
您有两个选择
SELECT TOP 1 value
BibContents
PoDetails
添加一个唯一约束,以防止这种情况发生。 BibContents
可能出现多条记录,则必须决定是否要返回。 我的建议是避免维护噩梦并解决根本原因。
为{{1}}制定另一个计划也不会受到伤害。看起来你已经采用了我认为是EAV model
的bad idea.主题