Sql server 具有多个条件和聚合函数的Case表达式

Sql server 具有多个条件和聚合函数的Case表达式,sql-server,case,aggregate,Sql Server,Case,Aggregate,我正在看一个有两个字段的表。一个表示特定产品箱子的高度,一个表示宽度。有些机箱的高度和宽度为1X1。对于1x1的情况,我试图写一个case表达式,它取所有乘以的case宽度和高度的平均值,并将其用作1乘以1的新度量值 我尝试了几种不同的案例陈述,以下是第一种: SELECT CASE WHEN T5.width = '1' AND T5.height = '1' THEN ( SELECT avg(t7.cub

我正在看一个有两个字段的表。一个表示特定产品箱子的高度,一个表示宽度。有些机箱的高度和宽度为1X1。对于1x1的情况,我试图写一个case表达式,它取所有乘以的case宽度和高度的平均值,并将其用作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。我还尝试分别计算平均值:

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)

这里有一些混合信息,是样本案例陈述中的平均值(宽度*高度),还是1x1案例样本数据中的平均值(宽度)*平均值(高度)

我认为你的第一个案例陈述看起来差不多完成了。评估第一个案例后,只有高度>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

案例表达式…您能提供示例数据、所需结果和数据库标记吗?