当前位置: 代码迷 >> Sql Server >> 好手帮忙写一条SQL语句(已附表结构)
  详细解决方案

好手帮忙写一条SQL语句(已附表结构)

热度:29   发布时间:2016-04-24 11:00:33.0
高手帮忙写一条SQL语句(已附表结构)

DECLARE @hooyes TABLE
    (
      area_name VARCHAR(50) ,
      area_code VARCHAR(20)
    )
    
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '1001', 'CA' )
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '1002', 'CA' )
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '1003', 'CA' )
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '2001', 'US' )
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '4001', 'AU' )
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '4002', 'AU' )


SELECT  area_name ,
        area_code
FROM    @hooyes
/*
直接查询的结果:


area_name area_code
CA         1001
CA         1002
CA         1003
US         2001
AU         4001
AU         4002
*/

/*  

想要一条 SQl 查出如下结果,按area_name分组,并且合并 area_code,以逗号隔开。

area_name area_code
CA         1001,1002,1003
US         2001
AU         4001,4002

 */


------解决方案--------------------
SELECT  area_name ,
        STUFF((SELECT ',' + b.area_code FROM @hooyes AS b WHERE b.area_name = a.area_name FOR XML PATH('') ) ,1,1,'')
FROM    @hooyes AS a 
GROUP BY area_name

--
area_name                                          
-------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AU                                                 4001,4002
CA                                                 1001,1002,1003
US                                                 2001

(3 row(s) affected)

------解决方案--------------------
[code=sql]
DECLARE @hooyes TABLE
    (
      area_name VARCHAR(50) ,
      area_code VARCHAR(20)
    )
     
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '1001', 'CA' )
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '1002', 'CA' )
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '1003', 'CA' )
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '2001', 'US' )
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '4001', 'AU' )
INSERT  INTO @hooyes
        ( area_code, area_name )
VALUES  ( '4002', 'AU' )
 
 
select area_name,
STUFF((SELECT',' + area_code FROM @hooyes WHERE area_name = a.area_name FOR XML PATH('')),1, 1, '')
  相关解决方案