我正在看一张有两个字段的表。一个用于特定产品的箱子的高度,一个用于宽度。有些情况下高度和宽度为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)
答案 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