首页 > 解决方案 > 子查询返回超过 1 个值错误

问题描述

SELECT 
    CASE CR.claim_status 
       WHEN 'RC' 
          THEN (SELECT ins_clause_no 
                FROM tbl_rej_code_master RCM 
                WHERE CR.s_no IN (SELECT s_no 
                                  FROM claim_rejection_code_trans CRCT 
                                  WHERE CRCT.irrmp_sr_no = RCM.rej_srno)) 
    END 
FROM   
    tblclaimregistration CR 

SELECT 
    CASE CR.claim_status 
       WHEN 'RC' THEN (SELECT clause_no 
                       FROM claim_rejection_code_trans CRCT 
                       WHERE CR.s_no = CRCT.s_no) 
    END AS Clause_No 
FROM
    tblclaimregistration CR; 

运行此代码时出现错误

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

请帮忙

标签: sql-server

解决方案


您的子查询 in case 语句返回超过 1 个值。

您必须只返回一个值,因为此子查询针对 CR 表的每一行执行。

您可以在每个子查询中使用“TOP 1”。

例如:

SELECT 
CASE CR.claim_status 
   WHEN 'RC' 
      THEN (SELECT TOP 1 ins_clause_no 
            FROM tbl_rej_code_master RCM 
            WHERE CR.s_no IN (SELECT s_no 
                              FROM claim_rejection_code_trans CRCT 
                              WHERE CRCT.irrmp_sr_no = RCM.rej_srno ORDER BY <Your Column>)) 
END 
FROM   
tblclaimregistration CR 

SELECT 
CASE CR.claim_status 
   WHEN 'RC' THEN (SELECT TOP 1 clause_no 
                   FROM claim_rejection_code_trans CRCT 
                   WHERE CR.s_no = CRCT.s_no ORDER BY <Your Column>) 
END AS Clause_No 
FROM
tblclaimregistration CR;

推荐阅读