关闭

如何实现横向聚合

标签: sql serverinserttable测试
5851人阅读 评论(3) 收藏 举报
分类:

问题描述:

有表tb,数据如下

A1 A2 A3 A4 A5

1  2  5  3  4

2  2  3  4  5

0  3  4  2  5

 

如何输出

A1 A2 A3 A4 A5 最大 最小  5以上个数

1  2  5  3  4   5    1       1

2  2  3  4  5   5    2       1

0  3  5  2  6   6    0       2

 

答:

SQL Server的聚合函数是在列上的,所以可以写自定义的函数,也可以想办法把列变为行,再用聚合函数处理

 

解决示例

--测试数据

DECLARE @t TABLE(A1 int, A2 int, A3 int, A4 int, A5 int)

INSERT @t SELECT 1,2,5,3,4

UNION ALL SELECT 2,2,3,4,5

UNION ALL SELECT 0,3,4,2,5

 

--查询

SELECT *,

    [min] = (

        SELECT MIN(v) FROM(

            SELECT v=A.A1 UNION SELECT v=A.A2 UNION SELECT v=A.A3

            UNION SELECT v=A.A4 UNION SELECT v=A.A5

        )B),

    [max] = (

        SELECT MAX(v) FROM(

            SELECT v=A.A1 UNION SELECT v=A.A2 UNION SELECT v=A.A3

            UNION SELECT v=A.A4 UNION SELECT v=A.A5

        )B),

    [count>=5] = (

        SELECT COUNT(*) FROM(

            SELECT v=A.A1 UNION SELECT v=A.A2 UNION SELECT v=A.A3

            UNION SELECT v=A.A4 UNION SELECT v=A.A5

        )B WHERE v>=5)

FROM @t A

 

查询结果:

A1          A2          A3          A4          A5          min         max         count>=5

----------- ----------- ----------- ----------- ----------- ----------- -----------

1           2           5           3           4           1           5           1

2           2           3           4           5           2           5           1

0           3           4           2           5           0           5           1

 

 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1280628次
    • 积分:14889
    • 等级:
    • 排名:第828名
    • 原创:178篇
    • 转载:9篇
    • 译文:0篇
    • 评论:881条
    最新评论