具有多个条件和聚合函数的案例表达式

时间:2017-10-23 15:01:13

标签: sql-server case aggregate

我正在看一张有两个字段的表。一个用于特定产品的箱子的高度,一个用于宽度。有些情况下高度和宽度为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相反。我也试过单独做平均值:

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

然而,这并不起作用,因为有些情况下高度可能= 1但宽度可能= 5.我只需要平均值,当它们都是一个时。

我正在使用SQL Server 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)

1 个答案:

答案 0 :(得分:0)

这里有一些混合信息,它是avg(宽度*高度),如样本Case语句或avg(宽度)* avg(高度),如1x1案例的样本数据?

我认为你做的第一个案例陈述看起来差不多完成了。在评估第一个案例之后,仅存在高度> 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 T5.width*T5.height -- here are the cases where width or height or both are > 1
    END AS AVG_cube
相关问题