[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吧^_^