2017-10-23 10 views
2

두 필드가있는 테이블을보고 있습니다. 하나는 특정 제품의 케이스 높이, 다른 하나는 너비입니다. 경우 중 일부는 높이와 너비에 대해 1X1입니다. 1 X 1 인 경우에 대해 곱한 모든 사례의 너비와 높이의 평균을 취하여 1에서 1까지의 새 측정 값으로 사용하는 사례 식을 작성하려고합니다.여러 조건 및 집계 함수가있는 사례 식

여기에 다른 사례가 나와 있습니다.

SELECT CASE 
      WHEN T5.width = '1' 
       AND T5.height = '1' THEN (
       SELECT avg(t7.cube) AS AVG_cube 
       FROM 
        (SELECT (width*height) AS CUBE 
        FROM TABLE 
        GROUP BY height, 
          width) AS T7 
      ELSE (CASE 
        WHEN t5.height > '1' 
          AND t5.width > '1' THEN t5.height 
        ELSE t5.width 
       END) 
     END AS AVG_cube 

이 숫자는 너무 높습니다. 너비와 높이가 1이 아니라면 이미있는 숫자를 사용하고 싶습니다. 이것이 끊기고있는 곳입니다. 나는 또한 단지 사용을 시도했다 :

ELSE T5.width 

그리고 반대로 t5.height. 그들은 모두 한 때 높이 = 5 월 1 일하지만 폭이 난 단지 평균을 필요로 5 = 수있는 경우가 있기 때문에

SELECT CASE 
     WHEN t5.height = '1' then 
       (SELECT AVG(height) 
       FROM TABLE) 
     ELSE t5.height 
    END AS height CASE 
        WHEN t5.width = '1' then 
          (SELECT AVG(width) 
          FROM TABLE) 
        ELSE t5.width 
       END AS width 

그러나 문제가 해결되지 않은 : 나는 또한 각각 따로 평균값을 수행했습니다.

나는 SQL 서버 2014을 사용하고 있습니다 및 이

Height | Width 
-------+------ 
    1 | 12 
    12 | 2 
    24 | 3 
    13 | 12 
    1 | 1 
가 는 지금까지 답변은 내가 찾고있을 것이다 간다

같은 몇 가지 샘플 데이터는 같습니다

12 (1x12) 
24 (2x12) 
36 (3*12) 
156 (13*12) 
57 (AVG(Width*Height) 
+0

케이스 _expressions _... – jarlh

+3

당신은 샘플 데이터, 원하는 결과 등을 제공 할 수 appropirate 데이터베이스 태그? –

답변

0

일부 혼합 정보를 원하시면 여기있다, 그것을이다 1x1 사례에 대한 샘플 데이터와 마찬가지로 평균 Case 문 또는 평균 (너비) * 평균 (높이)의 avg (너비 * 높이)?

첫 번째 사례 진술이 거의 완성 된 것 같습니다. 첫 번째 경우 평가 한 후, 키> 1 폭> 1 만 경우가 있습니다, 그래서 재확인 할 필요가 없습니다

SELECT CASE 
    WHEN T5.width = '1' 
    AND T5.height = '1' THEN (
     SELECT avg(t7.cube) AS AVG_cube 
     FROM 
      (SELECT (width*height) AS CUBE 
      FROM TABLE 
      GROUP BY height, 
      width) AS T7) 
    ELSE T5.width*T5.height -- here are the cases where width or height or both are > 1 
    END AS AVG_cube