2009-10-20 77 views
1

我有这个SQL下面,我用来比较z值。我把z放在子查询中,然后比较它。子查询中的子查询 - 有可能吗?

我的qn在我的下面的else语句中,我想在另一个公式中计算其他信息仅在另一个名为var1(例如,n)的表中可用的其他公式。我想总结(n)/ count(n)在我的else语句中以cv结尾。然后做一个case语句,如果cv> 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); 
+0

请注明SQL的味道,你正在尝试使用。 – 2009-10-20 09:59:53

+0

还有一个示例表definiton,其中包含您期望的示例输出? – Andomar 2009-10-20 10:36:51

+0

对于迟到的回复感到抱歉。 SQL的味道是什么意思? 表定义用于表VAR2 小号整数 恩浮 例如浮动 表麻利为VAR1 N×整数 样本输出将是: - Z-条件评论 -------- ---------------------------------------- > 1'请增加您的输入' <-1'请减少您的输入' <1 & > -1如果sum(n)/ count(n)> 10那么'LARGE' 其他'小' 如果您需要其他信息,请让我知道吗? – rayhan 2009-10-26 02:45:54

回答

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