小编Isa*_*van的帖子

如何在不使用数据透视表和逆透视表的情况下从 SQL Server 2008 R2 中的行获取中值

创建表脚本

create table temp 
(
    id int identity(1,1),
    a decimal(6,2),
    b decimal(6,2),
    c decimal(6,2),
    d decimal(6,2),
    e decimal(6,2),
    f decimal(6,2),
    g decimal(6,2),
    h decimal(6,2),
    i decimal(6,2),
    j decimal(6,2),
    k decimal(6,2),
    l decimal(6,2),
    m decimal(6,2),
    n decimal(6,2),
    o decimal(6,2),
    p decimal(6,2),
    q decimal(6,2),
    r decimal(6,2),
    s decimal(6,2),
    t decimal(6,2),
    u decimal(6,2)
)
Run Code Online (Sandbox Code Playgroud)

插入脚本

insert into temp
    (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u)
values
    (1,5,6,7,8,2,6,3,4,5,2,1,6,5,7,8,2,7,6,2,8)

insert into temp
    (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u)
values
    (1,5,6,7,8,2,2,3,2,4,2,1,4,5,9,8,2,7,6,2,8)
Run Code Online (Sandbox Code Playgroud)

预期结果

Median
======
first row  - 5.00
second row - 4.00 
Run Code Online (Sandbox Code Playgroud)

非工作解决方案

我尝试了以下查询,该查询在 SQL Server 2014 …

sql-server sql-server-2008-r2 compatibility-level

6
推荐指数
2
解决办法
349
查看次数

查找每行列值的中位数

我试过下面的查询,但显示的中值是错误的。

询问

select 
(select cast(Avg(TotAvg * 1.0 )as decimal(6,2))
 from (values (convert(decimal(6,2), a)),(convert(decimal(6,2), b))
             ,(convert(decimal(6,2), c)),(convert(decimal(6,2), d))
             ,(convert(decimal(6,2), e)),(convert(decimal(6,2), f))
             ,(convert(decimal(6,2), g)),(convert(decimal(6,2), h))
             ,(convert(decimal(6,2), i)),(convert(decimal(6,2), j))
             ,(convert(decimal(6,2), k)),(convert(decimal(6,2), l))
             ,(convert(decimal(6,2), m)),(convert(decimal(6,2), n))
             ,(convert(decimal(6,2), o)),(convert(decimal(6,2), p))
             ,(convert(decimal(6,2), q)),(convert(decimal(6,2), r))
             ,(convert(decimal(6,2), s)),(convert(decimal(6,2), t))
             ,(convert(decimal(6,2), u))
    ) as Totalavg(TotAvg)
) as Median
from temp
Run Code Online (Sandbox Code Playgroud)

列值是一行中的 a 到 u。

表值

First row - 1,5,6,7,8,2,6,3,4,5,2,1,6,5,7,8,2,7,6,2,8
Second row - 1,5,6,7,8,2,2,3,2,4,2,1,4,5,9,8,2,7,6,2,8
Run Code Online (Sandbox Code Playgroud)

创建表脚本

create table temp 
(
    id int identity(1,1),
    a decimal(6,2),
    b decimal(6,2),
    c decimal(6,2),
    d decimal(6,2), …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2

3
推荐指数
1
解决办法
512
查看次数