zoukankan      html  css  js  c++  java
  • 如何在sql server的group by语句中聚合字符串字段

    如何在sql server的group by语句中聚合字符串字段

    你的具体需求是怎么样的呢/

    下面是一个示例:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    如下表:AggregationTableId    Name    

    1    赵    

    2    钱    

    1    孙    

    1    李    

    2    周    

    如果想得到下图的聚合结果

    Id    Name

    1    赵孙李

    2    钱周 

    利用SUMAVGCOUNTCOUNT(*)、MAX 和 MIN是无法做到的。因为这些都是对数值的聚合。不过我们可以通过自定义函数的方式来解决这个问题。

    1.首先建立测试表,并插入测试数据: 

    复制代码代码如下:

    create table AggregationTable(Id int, [Namevarchar(10)) 

    go 

    insert into AggregationTable 

        select 1,'赵' union all 

        select 2,'钱' union all 

        select 1,'孙' union all 

        select 1,'李' union all 

        select 2,'周' 

    go

    2.创建自定义字符串聚合函数

    复制代码代码如下:

    Create FUNCTION AggregateString 

        @Id int 

    RETURNS varchar(1024) 

    AS 

    BEGIN 

        declare @Str varchar(1024) 

        set @Str = '' 

        select @Str = @Str + [Namefrom AggregationTable 

        where [Id] = @Id 

        return @Str 

    END 

    GO

    3.执行下面的语句,并查看结果 

    复制代码代码如下:

    select dbo.AggregateString(Id),Id from AggregationTable 

    group by Id 

    结果为:

    Id    Name    

    1    赵孙李    

    2    钱周

  • 相关阅读:
    关于form表单的相同name问题
    MySQL数据库视图
    Blazor
    查看Oracle正在执行的任务
    比较不错的几款开源的WPF Charts报表控件
    Raft算法
    EntityFramework 使用Linq处理内连接(inner join)、外链接(left/right outer join)、多表查询
    systemd、upstart和system V 枯木
    MRTG生成首页报错解决方法 枯木
    dd备份和恢复 枯木
  • 原文地址:https://www.cnblogs.com/grj001/p/12224893.html
Copyright © 2011-2022 走看看