哭佛林

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

数据库数据列字符串分割

1.       需求

原始数据

 

对超标指标进行分割,以便对每个指标进行统计,统计结果如下:

2.       代码

 

/*

3.   

4.  execute GetExceededStandardForWaterSource

5.   

6.  */

7.  -- =============================================

8.  -- Author:     <Author,,Name>

9.  -- Create date: <Create Date,,>

10.-- Description:   <Description,,>

11.-- =============================================

12.create PROCEDURE GetExceededStandardForWaterSource

13. -- Add the parameters for the stored procedure here

14.AS

15.BEGIN

16. -- SET NOCOUNT ON added to prevent extra result sets from

17. -- interfering with SELECT statements.

18. SET NOCOUNT ON;

19. 

20.CREATE TABLE #tmpTable(

21. [监测年] [char](4) COLLATE Chinese_PRC_CI_AS NULL,

22. [监测月] [char](2) COLLATE Chinese_PRC_CI_AS NOT NULL,

23. [水源地编码] [char](18) COLLATE Chinese_PRC_CI_AS NOT NULL,

24. [水源地类型编码] [varchar](2) COLLATE Chinese_PRC_CI_AS NULL,

25. [水源地类型] [varchar](8) COLLATE Chinese_PRC_CI_AS NOT NULL,

26. [流域编码] [varchar](12) COLLATE Chinese_PRC_CI_AS NULL,

27. [流域名称] [varchar](10) COLLATE Chinese_PRC_CI_AS NULL,

28. [行政区划代码] [varchar](18) COLLATE Chinese_PRC_CI_AS NULL,

29. [区域] [varchar](8) COLLATE Chinese_PRC_CI_AS NULL,

30. [省份] [varchar](16) COLLATE Chinese_PRC_CI_AS NULL,

31. [超标指标] [varchar](1000) COLLATE Chinese_PRC_CI_AS NULL,

32. [超标个数] [int] NOT NULL

33.) ON [PRIMARY]

34. 

35.declare @监测年char(4),@监测月char(2),@水源地编码char(18),@水源地类型编码varchar(2),@水源地类型varchar(8),@流域编码varchar(12),@流域名称varchar(10),@行政区划代码varchar(18),@区域varchar(8),@省份varchar(16),@超标指标varchar(1000),@超标个数int

36.declare @ch   as   varchar(100)

37.declare @StrSeprate char

38.set @StrSeprate = ','

39.

40.declare Index_cursor cursor for

41.select 监测年,监测月,水源地编码,水源地类型编码,水源地类型,流域编码,流域名称,行政区划代码,区域,省份,超标指标,超标个数from V_ExceededStandardForWaterSource

42. 

43.open Index_cursor

44.FETCH NEXT FROM Index_cursor into @监测年,@监测月,@水源地编码,@水源地类型编码,@水源地类型,@流域编码,@流域名称,@行政区划代码,@区域,@省份,@超标指标,@超标个数

45. 

46.while @@fetch_status = 0

47.begin

48. set @超标指标= @超标指标+ @StrSeprate

49.--print @超标指标

50.   while(@超标指标<>'')  

51.    begin  

52.        set @ch=left(@超标指标,charindex(',',@超标指标,1)-1)

53.--print @ch

54.        insert #tmpTable values(@监测年,@监测月,@水源地编码,@水源地类型编码,@水源地类型,@流域编码,@流域名称,@行政区划代码,@区域,@省份,@ch,@超标个数)

55.        set   @超标指标= stuff(@超标指标,1,charindex(',',@超标指标,1),'')

56.    end

57. FETCH NEXT FROM Index_cursor into @监测年,@监测月,@水源地编码,@水源地类型编码,@水源地类型,@流域编码,@流域名称,@行政区划代码,@区域,@省份,@超标指标,@超标个数

58.end

59.CLOSE Index_cursor

60.DEALLOCATE Index_cursor

61. 

62.select * from #tmpTable

63.drop table #tmpTable

64.END

65.   GO

66.   结论

posted on 2009-12-08 16:48  哭佛林<Kufolin>  阅读(440)  评论(0)    收藏  举报