日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

行转列的思考

發布時間:2024/9/20 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 行转列的思考 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近遇到一個行轉列的問題,給定一個時間段,統計每天每個車的簽到情況,用動態拼接的方法實現,受Varchar(8000)的影響,拼接的SQL語句不能太長,遇到這種動態列頭的問題,這種方法肯定不是很好,希望有高人指點新招~

/*建立車信息表*/

go if NOT EXISTS (select 1 from sysobjects where id = object_id('Car') AND type='U') BEGIN CREATE TABLE Car (Carid UNIQUEIDENTIFIER ,CarName VARCHAR(100)) end go /*插入一些數據*/ INSERT INTO Car SELECT NEWID(),'car1' UNIONSELECT NEWID(),'car2' UNIONSELECT NEWID(),'car3' UNIONSELECT NEWID(),'car4' UNIONSELECT NEWID(),'car5' UNIONSELECT NEWID(),'car6' UNIONSELECT NEWID(),'car7' /*建立簽到表*/ go if NOT EXISTS (select 1 from sysobjects where id = object_id('CarTime') AND type='U') BEGIN CREATE TABLE CarTime (CarTimeID UNIQUEIDENTIFIER ,CarId UNIQUEIDENTIFIER, operateDate DATETIME) END go /*插入一些數據*/ DECLARE @i INT SET @i=1 WHILE (@i<=10) BEGIN INSERT INTO CarTime SELECT NEWID(),CarId,'2012-08-'+CONVERT(VARCHAR(10),@i) FROM CarSET @i=@i+1 end /*統計一段時間所有車每天的簽到情況*/ go if EXISTS (select 1 from sysobjects where id = object_id('sp_CarTimeReport') AND type='P') BEGIN DROP PROC sp_CarTimeReport END go CREATE PROC [dbo].[sp_CarTimeReport] @BeginDate DATETIME, @EndDate DATETIME AS BEGIN DECLARE @begin DATETIME DECLARE @end DATETIME SET @begin=CONVERT(DATETIME,CONVERT(VARCHAR(10),@BeginDate,120)) SET @end=CONVERT(DATETIME,CONVERT(VARCHAR(10),@EndDate,120)) DECLARE @index DATETIME SET @index=@begin DECLARE @sql VARCHAR(8000) SET @sql=' SELECT car.CarName as 車名' WHILE(@index<=@end) BEGIN SET @sql=@sql+' ,case when sum(case when convert(varchar(10),carTime.OperateDate,120)='''+ CONVERT(VARCHAR(10),@index,120) +''' then 1 else null end) is not null then ''√'' else null end as '''+ CONVERT(VARCHAR(10),@index,120) +''' ' SET @index=@index+1 end SET @sql=@sql+' FROM Car left join CarTime on Car.carid=CarTime.carid group by Car.carid,car.CarName order by Car.CarName ' EXEC(@sql) END --DROP TABLE car --DROP TABLE cartime --DROP PROC sp_CarTimeReport--EXEC sp_CarTimeReport '2012-08-01','2012-08-30'

運行效果如下:

總結

以上是生活随笔為你收集整理的行转列的思考的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。