【发布时间】:2015-04-02 02:11:43
【问题描述】:
我想计算一列的中位数,将其分配给一个动态变量,然后在进一步的计算中使用它。这是我写的:
declare @sqlcmd nvarchar(max)
declare @tablename nvarchar(max)
set @tablename = 'table1'
-- calculate median
declare @median float
set @sqlcmd =
'SELECT
((SELECT MAX(field1) FROM
(SELECT TOP 50 PERCENT field1 FROM ' + @tablename + ' Where field1 is not null
ORDER BY field1) AS BottomHalf)
+
(SELECT MIN(field1) FROM
(SELECT TOP 50 PERCENT field1FROM ' + @tablename + ' Where field1 is not null
ORDER BY field1 DESC) AS TopHalf)
) / 2'
execute sp_executesql @sqlcmd
set @median = ???
-- calculate value2 as value 1 minus median
'update ' + @tablename +
' set value2 = value 1 - ' + @median
execute sp_executesql @sqlcmd
我的实验结果是:
- “将数据类型 nvarchar 转换为浮点数时出错。”
- 或者如果我删除第二个计算,它只是将结果弹出到结果窗口。
使用 SQL Server 2012。提前致谢!
【问题讨论】:
标签: sql sql-server median