在选择列表中只能指定一个表达式

时间:2019-05-31 08:40:24

标签: sql

无论如何,我在部分代码中遇到问题 如果未使用EXISTS引入子查询,则只能在选择列表中指定一个表达式。更新部分正在工作,但是如何使用insert into来计算条件是否并非意味着它将插入。

IF
    /* CHECKLIST TO UPDATE*/
    (NOT EXISTS     
        (SELECT *
        FROM    ENERGY.D_ENERGY_REFERENCE D_ENERGY_REFERENCE
                ,ENERGY.D_CHECK_LIST D_CHECK_LIST
        WHERE   D_ENERGY_REFERENCE.ID = D_CHECK_LIST.ID
        AND     D_ENERGY_REFERENCE.REFERENCE = 19051


        )
)

BEGIN 

INSERT INTO DB.D_ENERGY_REFERENCE(ID, REFERENCE_NO, REFERENCE,VALUE_INTEGER)
(SELECT ID, 
                (SELECT  ISNULL(MAX(REFERENCE_NO), 0) + 1 FROM DB.D_ENERGY_REFERENCE),
                19051,  (SELECT D_CHECK_LIST.ID,
      CASE 
        WHEN CAST(COUNT(CASE WHEN D_CHECK_LIST.EVALUATION  NOT IN (0,1) THEN EVALUATION ELSE NULL END) AS FLOAT) = 0 THEN NULL
        ELSE
        (
          CAST(COUNT(CASE WHEN D_CHECK_LIST.EVALUATION  IN (2, 3, 50001, 50003, 50004, 50005, 50006, 50020, 50027, 50028) THEN EVALUATION ELSE NULL END) AS FLOAT)
            /
            CAST(COUNT(CASE WHEN D_CHECK_LIST.EVALUATION  NOT IN (0,1) THEN EVALUATION ELSE NULL END) AS FLOAT)
        ) * 100 


    END  FROM DB.D_CHECK_LIST

     GROUP BY D_CHECK_LIST.ID) 

FROM DB.D_ENERGY_REFERENCE D_ENERGY_REFERENCE
WHERE  D_ENERGY_REFERENCE.ID = ID AND D_ENERGY_REFERENCE.REFERENCE = 19051
GROUP BY D_ENERGY_REFERENCE.ID
)

END

1 个答案:

答案 0 :(得分:0)

请您检查一下脚本子查询中的以下部分-

.......
19051,    
(
    SELECT 
    D_CHECK_LIST.ID, -- This is the column 1
    CASE 
        WHEN -- Here you are generating column 2 in the sub query
        ......
)

在这里选择2列-一列是“ D_CHECK_LIST.ID”,另一列是通过CASE WHEN语句生成的。我认为您应该从那2列中选择任何1列。如果两者都需要,则可以为此使用单独的Sub查询。

错误代码“当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式”是一种自我解释,除非子查询在内部使用,否则您不能实现选择了多于一列的子查询。 EXISTS方法。