Chinaunix首页 | 论坛 | 博客
  • 博客访问: 331585
  • 博文数量: 114
  • 博客积分: 1144
  • 博客等级: 少尉
  • 技术积分: 931
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-21 19:34
文章分类

全部博文(114)

文章存档

2012年(109)

2011年(5)

分类: 数据库开发技术

2012-09-04 18:44:21


点击(此处)折叠或打开

  1. /*    
  2. 实现行转列
  3. a
  4. name    objec    score
  5. a        EN        89
  6. a        CH        78
  7. a        HO        99
  8. b        EN        34
  9. b        CH        88
  10. b        HO        66
  11. 要求输出结果为:
  12. name    EN    CH    HO
  13. a        89    78    99
  14. b        34    88    66
  15. */

  16. USE tempdb
  17. IF (SELECT 1 FROM sys.sysobjects WHERE name ='t' AND type='u') is NOT NULL
  18. DROP TABLE t


  19. CREATE TABLE t
  20. (
  21.     NAME    CHAR(10),
  22.     objec    CHAR(10),
  23.     score    FLOAT
  24. )
  25. INSERT INTO t
  26. VALUES('a','EN',89),('a','CH',78),('a','HO',99),('b','EN',34),('b','CH',88),('b','HO',66)

  27. SELECT * FROM T

  28. SELECT NAME ,MAX(CASE objec WHEN 'EN' THEN score ELSE 0 END ) EN,MAX(CASE objec WHEN 'CH' THEN score ELSE 0 END ) CH,MAX(CASE objec WHEN 'HO' THEN score ELSE 0 END ) HO
  29. FROM t
  30. GROUP BY NAME
  31. --=======================================================================================================================================================

  32. /*    
  33. 实现行转列
  34. a
  35. name    objec    score
  36. a        EN        89
  37. a        CH        78
  38. a        HO        99
  39. b        EN        34
  40. b        CH        88
  41. b        HO        66
  42. 要求输出结果为:
  43. name    objec        totalsorce
  44. a        EN,CH,HO    266
  45. b        EN,CH,HO    188
  46. */

  47. USE tempdb
  48. IF (SELECT 1 FROM sys.sysobjects WHERE name ='t' AND type='u') is NOT NULL
  49. DROP TABLE t

  50. CREATE TABLE t
  51. (
  52.     NAME    CHAR(10),
  53.     objec    CHAR(10),
  54.     score    FLOAT
  55. )
  56. INSERT INTO t
  57. VALUES('a','EN',89),('a','CH',78),('a','HO',99),('b','EN',34),('b','CH',88),('b','HO',66)

  58. SELECT * FROM T

  59. --为了去除objec中的最后一个逗号,插入一个临时表,并使用substring处理

  60. SELECT name ,(SELECT LTRIM(RTRIM(objec))+',' FROM T WHERE objec=t.objec FOR XML PATH('')) objec,SUM(temp.score) totalscroe INTO #tmp
  61. FROM T temp
  62. GROUP BY name


  63. SELECT NAME ,SUBSTRING(objec,0,LEN(objec)-1) objec ,totalscroe
  64. FROM #tmp

阅读(1948) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~