搜索
查看: 1143|: 0

sql语句——连接同一字段的所有值

[复制链接]

191

主题

18

回帖

694

积分

高级会员

积分
694
发表于 2014-11-10 17:08:56 | 显示全部楼层 |阅读模式
  1. Oracle可以用SYS_CONNECT_BY_PATH字符串聚合函数:
  2. SELECT LTRIM(MAX(SYS_CONNECT_BY_PATH(productname, ', ')), ', ') AS productname
  3. FROM(
  4.     SELECT '1' as id, productname,
  5.         ROW_NUMBER() OVER (PARTITION BY '1' ORDER BY productname) AS curr,
  6.         ROW_NUMBER() OVER (PARTITION BY '1' ORDER BY productname) -1 AS prev
  7.     FROM products
  8.     -- where 条件
  9.     order by productname
  10. )
  11. START WITH curr = 1
  12. CONNECT BY prev = PRIOR curr AND id = PRIOR id
  13. GROUP BY id

  14. 但MS SQL 2000没有这种函数,但可以通过自定义函数或过程来实现.
  15. -- drop function ConnectString
  16. Create FUNCTION ConnectString( @name varchar(20) )
  17. RETURNS varchar(1024)
  18. AS
  19. BEGIN
  20. declare @Str varchar(1024)
  21. set @Str = ''
  22. select @Str = @Str + (case when @Str = '' then '' else ',' end) + [productname] from products
  23. --where [productname] = @name
  24. return @Str
  25. END
  26. GO

  27. -- 调用
  28. select DISTINCT dbo.ConnectString(productname) from products

  29. SQL Server 2005 可用OUTER APPLY:
  30. 以下是从网上摘录的:
  31. -- 示例数据
  32. DECLARE @t TABLE(id int, value varchar(10))
  33. INSERT @t SELECT 1, 'aa'
  34. UNION ALL SELECT 1, 'bb'
  35. UNION ALL SELECT 2, 'aaa'
  36. UNION ALL SELECT 2, 'bbb'
  37. UNION ALL SELECT 2, 'ccc'

  38. -- 查询处理
  39. SELECT *
  40. FROM(
  41.     SELECT DISTINCT
  42.         id
  43.     FROM @t
  44. )A
  45. OUTER APPLY(
  46.     SELECT
  47.         [values]= STUFF(REPLACE(REPLACE(
  48.             (
  49.                 SELECT value FROM @t N
  50.                 WHERE id = A.id
  51.                 FOR XML AUTO
  52.             ), '<N value="', ','), '"/>', ''), 1, 1, '')
  53. )N

  54. /*--结果
  55. id          values
  56. ----------- ----------------
  57. 1           aa,bb
  58. 2           aaa,bbb,ccc
  59. (2 行受影响)
  60. --*/
复制代码

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

大数据中国微信

QQ   

版权所有: Discuz! © 2001-2013 大数据.

GMT+8, 2024-11-15 20:57 , Processed in 0.054589 second(s), 24 queries .

快速回复 返回顶部 返回列表