在开发中,经常会遇到要吧一行行数据按照某一行进行分组
USE [OA]
GO
/****** Object: StoredProcedure [dbo].[usp_report_GatherDataMsgRpt] Script Date: 12/02/2014 10:42:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[usp_report_GatherDataMsgRpt]
@datamsgid int
AS
begin
DECLARE @t_dataPublish_id INT ,@t_dataPublishColumn_id INT , @execSQL VARCHAR(4000),@temSql1 VARCHAR(4000) ,@temSql2 VARCHAR(4000)
,@columnKey varchar(200)
SELECT @t_dataPublish_id=@datamsgid
SELECT @execSQL='' ,@temSql1='',@temSql2='',@columnKey =''
DECLARE Cur CURSOR
FOR
SELECT t1.id
FROM dbo.t_dataPublishColumn t1
WHERE t1.t_dataPublish_id = @t_dataPublish_id
SELECT @execSQL = 'SELECT '
OPEN Cur
FETCH NEXT FROM Cur INTO @t_dataPublishColumn_id
WHILE @@fetch_status = 0
BEGIN
SELECT @columnKey=''
SELECT
@columnKey =
LTRIM(t2.columnName)
FROM t_dataPublishColumn t2
WHERE t2.id=@t_dataPublishColumn_id
SET @temSql1 = @temSql1 + ',MAX(' + LTRIM(@columnKey) + ') as '+ LTRIM(@columnKey)
SET @temSql2 = @temSql2 + ',CASE WHEN t2.t_dataPublishColumn_id='
+ LTRIM(@t_dataPublishColumn_id) + ' then cellValue END '
+ LTRIM(@columnKey)
FETCH NEXT FROM Cur INTO @t_dataPublishColumn_id
END
CLOSE Cur
DEALLOCATE Cur
SELECT @execSQL = @execSQL + SUBSTRING(@temSql1,2,LEN(@temSql1)) + ' FROM (
SELECT t2.rownum
' + @temSql2
+ '
FROM t_dataPublishColumn t1,t_dataPublishDetail t2 WHERE t1.id=t2.t_dataPublishColumn_id AND t1.t_dataPublish_id='
+ LTRIM(@t_dataPublish_id) + ') x GROUP BY x.rownum
'
PRINT @execSQL
EXEC(@execSQL)
END