zoukankan      html  css  js  c++  java
  • [列变行]将一张表中符合条件的列数据逗号分开查询出来

      1 合并列值 
      2 --*******************************************************************************************
      3 表结构,数据如下: 
      4 id    value 
      5 ----- ------ 
      6 1    aa 
      7 1    bb 
      8 2    aaa 
      9 2    bbb 
     10 2    ccc 
     11 
     12 需要得到结果: 
     13 id    values 
     14 ------ ----------- 
     15 1      aa,bb 
     16 2      aaa,bbb,ccc 
     17 即:group by id, 求 value 的和(字符串相加) 
     18 
     19 1. 旧的解决方法(在sql server 2000中只能用函数解决。) 
     20 --=============================================================================
     21 create table tb(id int, value varchar(10)) 
     22 insert into tb values(1, 'aa') 
     23 insert into tb values(1, 'bb') 
     24 insert into tb values(2, 'aaa') 
     25 insert into tb values(2, 'bbb') 
     26 insert into tb values(2, 'ccc') 
     27 go 
     28 --1. 创建处理函数 
     29 CREATE FUNCTION dbo.f_strUnite(@id int) 
     30 RETURNS varchar(8000) 
     31 AS 
     32 BEGIN 
     33     DECLARE @str varchar(8000) 
     34     SET @str = '' 
     35     SELECT @str = @str + ',' + value FROM tb WHERE id=@id 
     36     RETURN STUFF(@str, 1, 1, '') 
     37 END 
     38 GO 
     39 -- 调用函数 
     40 SELECt id, value = dbo.f_strUnite(id) FROM tb GROUP BY id 
     41 drop table tb 
     42 drop function dbo.f_strUnite 
     43 go
     44 /* 
     45 id          value      
     46 ----------- ----------- 
     47 1          aa,bb 
     48 2          aaa,bbb,ccc 
     49 (所影响的行数为 2 行) 
     50 */ 
     51 --===================================================================================
     52 2. 新的解决方法(在sql server 2005中用OUTER APPLY等解决。) 
     53 create table tb(id int, value varchar(10)) 
     54 insert into tb values(1, 'aa') 
     55 insert into tb values(1, 'bb') 
     56 insert into tb values(2, 'aaa') 
     57 insert into tb values(2, 'bbb') 
     58 insert into tb values(2, 'ccc') 
     59 go 
     60 -- 查询处理 
     61 SELECT * FROM(SELECT DISTINCT id FROM tb)A OUTER APPLY( 
     62         SELECT [values]= STUFF(REPLACE(REPLACE( 
     63             ( 
     64                 SELECT value FROM tb N 
     65                 WHERE id = A.id 
     66                 FOR XML AUTO 
     67             ), ' <N value="', ','), '"/>', ''), 1, 1, '') 
     68 )N 
     69 drop table tb 
     70 
     71 /* 
     72 id          values 
     73 ----------- ----------- 
     74 1          aa,bb 
     75 2          aaa,bbb,ccc 
    
     76 
     77 (2 行受影响) 
     78 */ 
     79 
     80 --SQL2005中的方法2 
     81 create table tb(id int, value varchar(10)) 
     82 insert into tb values(1, 'aa') 
     83 insert into tb values(1, 'bb') 
     84 insert into tb values(2, 'aaa') 
     85 insert into tb values(2, 'bbb') 
     86 insert into tb values(2, 'ccc') 
     87 go 
     88 
     89 select id, [values]=stuff((select ','+[value] from tb t where id=tb.id for xml path('')), 1, 1, '') 
     90 from tb 
     91 group by id 
     92 
     93 /* 
     94 id          values 
     95 ----------- -------------------- 
     96 1          aa,bb 
     97 2          aaa,bbb,ccc 
     98 
     99 (2 row(s) affected) 
    100 
    101 */ 
    View Code
     1 create table tb1(id int primary key identity(1,1),sname varchar(10)) 
     2 insert tb1 values('张三')
     3 insert tb1 values('李四')
     4 insert tb1 values('王五')
     5 create table tb2(id int,class varchar(10),score int)
     6 insert tb2 values (1,'数学',100)
     7 insert tb2 values (1,'语文',100)
     8 insert tb2 values (1,'英语',90)
     9 insert tb2 values (2,'数学',30)
    10 insert tb2 values (2,'语文',40)
    11 insert tb2 values (2,'英语',100)
    12 insert tb2 values (3,'数学',100)
    13 insert tb2 values (3,'语文',40)
    14 insert tb2 values (3,'英语',100)
    15 
    16 select *,class=stuff((select ','+class from tb2 
    17       where id=a.id and score=100 for XML path('')),1,1,'')
    18 from tb1 a      
    19 
    20 /*
    21 id          sname      class
    22 ----------- ---------- -----------
    23 1           张三         数学,语文
    24 2           李四         英语
    25 3           王五         数学,英语
    View Code
  • 相关阅读:
    ElasticSearch Index API && Mapping
    jQuery静态方法type使用和源码分析
    jQuery原型属性和方法总结
    jQuery原型方法first,last,eq,slice源码分析
    jQuery原型方法.pushStack源码分析
    解决浏览器窗口变小后右侧出现空白背景颜色或者图片不能全屏填充的方法
    js方法实现rgb颜色转换成16进制格式的代码的方法
    一个解决表单中的文字和文本区域(textarea)上对齐的方法
    jquery原型方法map的使用和源码分析
    jQuery原型方法each使用和源码分析
  • 原文地址:https://www.cnblogs.com/Spacecup/p/3572899.html
Copyright © 2011-2022 走看看