【问题标题】:Error: Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >=错误:子查询返回超过 1 个值。当子查询跟随 =、!=、<、<=、>、>= 时,这是不允许的
【发布时间】:2021-05-28 03:46:07
【问题描述】:

这里显示的我的查询在Description 列中返回多行并导致标题中提到的错误。

有什么建议吗?

SELECT 
    T0.[TransId], T0.[Account], T0.[ShortName], T0.[ContraAct], 
    CASE
        WHEN T0.[TransType] = '18 '
           THEN (SELECT Description FROM PCH1 
                 WHERE DocEntry = T0.CreatedBy AND AcctCode = T0.Account)
           ELSE T0.[LineMemo]
    END AS Description,
    T0.[Ref3Line], T0.[TransType], T0.[RefDate], 
    T0.[CreatedBy], T0.[BaseRef] 
FROM 
    JDT1 T0 
WHERE 
    T0.[Account] = '630000'

【问题讨论】:

  • 错误信息再清楚不过了。上述较大查询中的子查询有时会返回多个值,而CASE 表达式只要求标量(单个)值必须遵循THENELSE。请在此处将示例数据添加到您的问题中以获得最佳结果。
  • SELECT Description FROM PCH1 WHERE DocEntry = T0.CreatedBy AND AcctCode = T0.Account 返回多个值是根本原因。使用 top(1) 将解决这个问题。希望这对你有帮助
  • 错误很明显。你想做什么还不清楚。

标签: sql sql-server


【解决方案1】:

我猜你的子查询返回多条记录

(SELECT Description FROM PCH1 
             WHERE DocEntry = T0.CreatedBy AND AcctCode = T0.Account)

您可以尝试为您的

添加SELECT TOP 1 选择 T0.[TransId], T0.[Account], T0.[ShortName], T0.[ContraAct], 案子 当 T0.[TransType] = '18' THEN (SELECT TOP 1 Description FROM PCH1 WHERE DocEntry = T0.CreatedBy AND AcctCode = T0.Account) ELSE T0.[LineMemo] 结束作为描述, T0.[Ref3Line], T0.[TransType], T0.[RefDate], T0.[CreatedBy],T0.[BaseRef] 从 JDT1 T0 在哪里 T0.[帐户] = '630000'

希望有用 通过 GoDevStack

【讨论】:

  • 但是一个SELECT TOP (n) 没有一个明确的ORDER BY 有点没用——你得到了哪个“前1”行?你需要明确定义一个订单来得到你真正需要的东西......
猜你喜欢
  • 2012-06-04
  • 2016-08-02
  • 2019-10-13
  • 1970-01-01
  • 2022-11-02
相关资源
最近更新 更多