子查询中的子查询 - 是否可能?

时间:2009-10-20 09:45:56

标签: sql subquery

我在下面用这个sql来比较z的值。我把z放在子查询中然后比较它。

我的qn在我下面的else语句中,我想要另外一个公式来计算其他信息仅在另一个名为var1的表中可用的公式(例如,n)。我想把sum(n)/ count(n)作为cv在我的else语句中结束。如果cv>然后做一个案例陈述10然后太大,如果< 10太少了。

我应该在这个子查询中做另一个子查询吗?任何建议请。谢谢!

select 
z, 
CASE 
when z > 1 then 'Pls increase your inputs' 
when z < -1 then 'Pls decrease your inputs'
else 'No comment' END as Input

from 

(select
    case
    when S < 0 then (S/En-Eg))
    else (S/En+Eg)) 
    end as z
from var2);

1 个答案:

答案 0 :(得分:3)

你走在正确的轨道上。对于像SUM()和COUNT()这样的聚合,我建议使用相关的子查询;也就是说,子查询保证为每个键值(var1.primary_key)返回一个聚合值(SUM(n)/ COUNT(n))。

例如,此查询使用相关子查询返回所需的值,使SUM(n)/ COUNT(n)可用于外部查询:

SELECT      v.z,
            CASE WHEN v.z > 1
                 THEN 'Pls increase your inputs'
                 WHEN v.z < -1
                 THEN 'Pls decrease your inputs'
                 ELSE 'No comment' END AS INPUT,
            CASE WHEN v.cv > 10
                 THEN 'Pls decrease your inputs'
                 WHEN v.cv < 10
                 THEN 'Pls increase your inputs'
                 ELSE 'No comment' END AS INPUT                     
  FROM      (SELECT      CASE WHEN s < 0
                              THEN (s / en - eg)
                              ELSE (S/En+Eg) END AS 'z',
                         ISNULL(AVG_N.cv, 0) AS 'cv'
               FROM      var2
                         INNER JOIN 
                         (
                          SELECT      var1.primary_key AS 'PrimaryKey',
                                      SUM(var1.N) / COUNT(var1.N) AS 'cv'
                            FROM      var1
                           WHERE      var1.primary_key = var2.primary_key
                          GROUP BY    var1.N
                         ) AVG_N
                         ON AVG_N.PrimaryKey = var2.primary_key
            ) v