2009-10-20 6 views
1

나는이 zql의 값을 비교하는 데 사용하는 아래의이 SQL 있습니다. 하위 쿼리에 z를 넣은 다음 비교합니다.하위 쿼리 내의 하위 쿼리 - 가능합니까?

내 qn은 아래의 else 문에 있으며 다른 공식을 사용하여 var1 (예 : n)이라는 다른 테이블에서만 정보를 사용할 수 있습니다. 나는 sum (n)/count (n)을 else 문에 cv로 끝내고 싶습니다. 그런 다음 cv> 10이 너무 큰 경우 case 문을 작성하십시오. <이 너무 적 으면 10입니다.

이 하위 쿼리에서 다른 하위 쿼리를 수행해야합니까? 어떤 조언을 pls. 감사!

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의 맛을 지정하십시오 당신을 사용하려고합니다. –

+0

샘플 출력은 예상 할 수있는 샘플 테이블로 정의됩니까? – Andomar

+0

늦게 답장을 보내 주셔서 감사합니다. SQL의 맛이 무엇을 의미합니까? 욕실은 예 : 샘플 출력 될 VAR1 N 정수 손재주 테이블 플로트 플로트 테이블 VAR2 S 정수 위한 테이블 정의 - Z-조건 코멘트 -------- ---------------------------------------- > 1 '증가 입력' <-1 'Pls가 입력을 줄입니다. <1 & > -1 sum (n)/count (n)> 10이면'LARGE ' Else'SMALL ' 다른 정보가 필요하면 알려주세요. – rayhan

답변

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