2009-10-20 25 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