SQL 服务器:视图中值的特殊计算
SQL Server : special calculation for value in a view
我想按如下方式计算列(已计算):
Calculated
值是 Value
的两倍,只要不存在比 Value
更高的 Calculated
值,否则它应该为零。
基本上,列 Calculated
的最大值应该至少是其类别 (Column1
) 所有值大小的一半。
我在 SQL 服务器数据库中有一个视图,这对我来说意味着我不能使用 ORDER BY
。
我的示例值:
CREATE TABLE test_table2020
(
Column1 INT,
Column2 VARCHAR(1),
Value INT
)
我这样填充它:
INSERT INTO test_table2020
VALUES (1, 'A', 10), (1, 'A', 12),
(1, 'A', 22), (1, 'A', 23),
(1, 'A', 13), (1, 'A', 24),
(2, 'B', 15), (3, 'C', 16),
(3, 'C', 28), (3, 'C', 31),
(4, 'D', 9) , (4, 'D', 9)
我认为我可以从这里获得每个不同 Column1 的最大值(计算)。
我真的不知道该怎么做,这将适用于几行的情况。
这将显示不带零的计算值:
SELECT *, value * 2 AS Calculated FROM test_table2020
这是为了计算应该升级到什么价值的东西而不过度。
与 CASE 配合使用的 window 函数会有所帮助
编辑:不清楚 Column2
是否应该嵌入 partition
模式有点模棱两可。
例子
Select *
,Calculated = case when (Value*1.5<max(Value) over (partition by column1)
and sum(1) over (partition by column1) > 1 )
or ( avg(value) over (partition by column1) = value )
then Value * 2
else 0 end
From test_table2020
Returns
我想按如下方式计算列(已计算):
Calculated
值是 Value
的两倍,只要不存在比 Value
更高的 Calculated
值,否则它应该为零。
基本上,列 Calculated
的最大值应该至少是其类别 (Column1
) 所有值大小的一半。
我在 SQL 服务器数据库中有一个视图,这对我来说意味着我不能使用 ORDER BY
。
我的示例值:
CREATE TABLE test_table2020
(
Column1 INT,
Column2 VARCHAR(1),
Value INT
)
我这样填充它:
INSERT INTO test_table2020
VALUES (1, 'A', 10), (1, 'A', 12),
(1, 'A', 22), (1, 'A', 23),
(1, 'A', 13), (1, 'A', 24),
(2, 'B', 15), (3, 'C', 16),
(3, 'C', 28), (3, 'C', 31),
(4, 'D', 9) , (4, 'D', 9)
我认为我可以从这里获得每个不同 Column1 的最大值(计算)。
我真的不知道该怎么做,这将适用于几行的情况。
这将显示不带零的计算值:
SELECT *, value * 2 AS Calculated FROM test_table2020
这是为了计算应该升级到什么价值的东西而不过度。
与 CASE 配合使用的 window 函数会有所帮助
编辑:不清楚 Column2
是否应该嵌入 partition
模式有点模棱两可。
例子
Select *
,Calculated = case when (Value*1.5<max(Value) over (partition by column1)
and sum(1) over (partition by column1) > 1 )
or ( avg(value) over (partition by column1) = value )
then Value * 2
else 0 end
From test_table2020
Returns