0

我有一个SQL查询,如下临时列值:检索基于列的子查询中的价值

SELECT SUM(Z.MaxMarks) AS TotMaxMarks, 
    SUM(Z.MinMarks) AS TotMinMarks, 
    SUM(Z.SecuredMarks) AS TotSecuredMarks, 
    Z.IsPass 
FROM (
    SELECT Y.* 
    FROM (
     SELECT X.MaxMarks, 
      X.SecuredMarks, 
      (X.MaxMarks * X.PassPercentage/100) AS MinMarks, 
      CASE WHEN ((X.MaxMarks * X.PassPercentage/100) < X.SecuredMarks) THEN 'True' ELSE 'False' END AS IsPass, 
      row_number() OVER (
       PARTITION BY ChapterID ORDER BY UpdatedDate DESC 
       ) AS SequencNo 
     FROM (
      SELECT C.ChapterID, 
       T.MinimumMarks AS PassPercentage, 
       (
        SELECT Sum(Q.MaximumMarks) 
        FROM MstQuestion Q, 
         TransStudentAnswer SA 
        WHERE Q.QuestionID = SA.QuestionID AND SA.TestAllotmentID = TA.TestAllotmentID 
        ) AS MaxMarks, 
       (
        SELECT Sum(Score) 
        FROM TransStudentAnswer 
        WHERE TestAllotmentID = TA.TestAllotmentID 
        ) AS SecuredMarks, 
       TA.UpdatedDate 
      FROM TransTestAllotment TA, 
       MstStudent S, 
       MstBatchDetails B, 
       MstTest T, 
       MstChapter C 
      WHERE TA.StudentID = 47 AND TA.BatchID = 10 AND T.TestID = TA.TestID AND S.StudentID = TA.StudentID AND B.BatchID = TA.BatchID AND T.ChapterID = C.ChapterID AND TA.IsAttempted = 'True' AND TA.IsEvaluated = 'True' 
      ) X 
     ) Y 
    WHERE SequencNo = 1 
    ) Z 
GROUP BY Z.IsPass 

它返回的结果如下:

+-------------+-------------+-----------------+--------+ 
| TotMaxMarks | TotMinMarks | TotSecuredMarks | IsPass | 
+-------------+-------------+-----------------+--------+ 
|   20 |   10 |    3 | False | 
|   30 |   15 |    28 | True | 
+-------------+-------------+-----------------+--------+ 

是否有可能修改此查询,使其返回一个记录,其中SUM(Z.MaxMarks),SUM(Z.MinMarks),SUM(Z.SecuredMarks) and TempIsPass column的值将为true,如果Z的所有记录中的列值为Z.Ispass is true,否则应该为false。

回答

0

希望这个工程。

使用SELECT INTO查询选择您进入临时表'z'的表。然后做这个

SET @count = (SELECT COUNT(IsPass) FROM Z); 
    SET @count1 = (SELECT COUNT(IsPass) FROM Z WHERE IsPass='true'); 

    IF(@count = @count1) 
    THEN 
     SELECT SUM(Z.MaxMarks) AS MaxMarks, SUM(Z.MinMarks) AS MinMarks, SUM(Z.SecuredMarks) AS SecuredMarks, 'true' AS TempIsPass FROM Z 
END 
0

在你的SELECT子句中,替换为Z.IsPass

case when min(case when Z.IsPass = 'true' then 1 else 0 end) = 1 then 'true' else 'false' end