[ASP.net] GridView如何動態插入資料(分組資訊) (使用SQL函數解法)

[ASP.net] GridView如何動態插入資料(分組資訊) (使用SQL函數解法)

靈感來源:http://social.msdn.microsoft.com/Forums/zh-TW/236/thread/fde2af8a-135b-4e74-a8b4-7966127358b1

其實解法跟[ASP.net] GridView 如何動態插入小計資料 (使用SQL函數解法)有異曲同工之妙

回傳資料集的資料表值函數真好用~


/*這邊都是建物件和塞資料*/
Create table tb_UserTable /*建立Table*/ 
( 
 [myDate] [date] ,
 [title] [nvarchar](50) NULL, 
 [number] int

) 
/*塞資料*/ 
Insert into tb_UserTable ([myDate],[title],[number]) Values (N'2011-07-26',N'平日-晚餐',N'19') 
Insert into tb_UserTable ([myDate],[title],[number]) Values (N'2011-07-26',N'假日-晚餐',N'31') 
Insert into tb_UserTable ([myDate],[title],[number]) Values (N'2011-07-26',N'台灣啤酒',N'4') 
/*塞資料*/ 
Insert into tb_UserTable ([myDate],[title],[number]) Values (N'2011-07-27',N'平日-晚餐',N'19') 
Insert into tb_UserTable ([myDate],[title],[number]) Values (N'2011-07-27',N'假日-晚餐',N'31') 
Insert into tb_UserTable ([myDate],[title],[number]) Values (N'2011-07-27',N'台灣啤酒',N'4') 

 

 


Create FUNCTION [dbo].[udf_UserTable] 
(@dateStart date,@dateEnd date)
RETURNS @User_Table TABLE
 (
 [myDate] [date] ,
 [title] [nvarchar](50) NULL, 
 [number] int
 )
BEGIN 
 While(@dateStart<=@dateEnd) 
  Begin 
    /*有該日期資料才塞資料到變數table*/
	  if ((Select count(*) from tb_UserTable Where myDate=@dateStart)>0)
	  Begin
	  Insert into @User_Table ([myDate]) Values (@dateStart) --先塞日期到暫存變數table
	  --再塞資料
	  	Insert into @User_Table
	  	Select [myDate],[title],[number] 
	  	From tb_UserTable
	  	Where [myDate]=@dateStart
	  End/*結束if*/	
        Set @dateStart = DateAdd(day,1,@dateStart)		
	 	
  End /*結束While迴圈*/

 RETURN /*回傳table變數*/
END

呼叫方法:


Select * from dbo.udf_UserTable('2011-07-26','2011-07-27')/*起始日和結束日*/

結果如下:

這種事交給SA做,PG還是乖乖拿組好的SQL語法寫Code吧^_^