Sql server 具有多个条件和聚合函数的Case表达式
我正在看一个有两个字段的表。一个表示特定产品箱子的高度,一个表示宽度。有些机箱的高度和宽度为1X1。对于1x1的情况,我试图写一个case表达式,它取所有乘以的case宽度和高度的平均值,并将其用作1乘以1的新度量值 我尝试了几种不同的案例陈述,以下是第一种: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
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
案例表达式…您能提供示例数据、所需结果和数据库标记吗?