亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

字符/字段數據的合并

2024-07-21 02:46:41
字體:
來源:轉載
供稿:網友
字符/字段數據的合并

前兩篇文章是關于字符串分割的一些經驗,今天來談下字符的合并,更確切的說是字段數據的合并吧?,F在很多公司,尤其是工廠,上下班都要刷卡。假如有以下的數據庫表,記錄著員工上下班的刷卡記錄。但是這樣直接導出或顯示,不太好看,不夠直觀。下面實現把每個員工每天的刷卡時間橫向顯示。

插入測試數據:

 1 CREATE TABLE CARD_RECORD ( 2     id_ INT IDENTITY(1,1) NOT NULL PRIMARY KEY, 3     card_id INT NOT NULL, 4     swipe_date DATETIME NOT NULL 5 ) 6 GO 7  8 INSERT INTO CARD_RECORD (card_id,swipe_date) 9 SELECT '10001','2015-06-01 08:21'10 UNION ALL11 SELECT '10002','2015-06-01 08:22'12 UNION ALL13 SELECT '10001','2015-06-01 12:00'14 UNION ALL15 SELECT '10002','2015-06-01 12:01'16 UNION ALL17 SELECT '10001','2015-06-01 13:00'18 UNION ALL19 SELECT '10002','2015-06-01 13:01'20 UNION ALL21 SELECT '10002','2015-06-01 18:05'22 UNION ALL23 SELECT '10001','2015-06-01 18:12'24 UNION ALL25 SELECT '10002','2015-06-02 08:31'26 UNION ALL27 SELECT '10001','2015-06-02 08:42'28 UNION ALL29 SELECT '10001','2015-06-02 12:10'30 UNION ALL31 SELECT '10002','2015-06-02 12:11'32 UNION ALL33 SELECT '10001','2015-06-02 13:00'34 UNION ALL35 SELECT '10002','2015-06-02 13:11'36 UNION ALL37 SELECT '10001','2015-06-02 18:05'38 UNION ALL39 SELECT '10002','2015-06-02 18:12'40 UNION ALL41 SELECT '10002','2015-06-02 19:34'42 UNION ALL43 SELECT '10001','2015-06-03 08:36'44 UNION ALL45 SELECT '10002','2015-06-03 08:40'46 UNION ALL47 SELECT '10001','2015-06-03 12:20'48 UNION ALL49 SELECT '10002','2015-06-03 12:20'50 UNION ALL51 SELECT '10001','2015-06-03 12:55'52 UNION ALL53 SELECT '10002','2015-06-03 12:56'54 UNION ALL55 SELECT '10001','2015-06-03 18:05'56 GO
View Code

創建字符/字段數據合并的函數:

 1 IF OBJECT_ID(N'fn_time_list') IS NOT NULL 2 BEGIN 3     DROP FUNCTION fn_time_list 4 END 5 GO 6  7 CREATE FUNCTION fn_time_list (@date DATETIME,@card_id NVARCHAR(100)) 8 RETURNS NVARCHAR(MAX) 9 AS 10 BEGIN11     DECLARE @char NVARCHAR(MAX)12     DECLARE @date2 DATE13     SET @char = ''14     SET @date = CAST(@date AS DATE)15     SET @date2 = DATEADD(DAY,1,CAST(@date AS DATE))16     17     SELECT @char = @char + CONVERT(CHAR(5),swipe_date,108) + ',' FROM CARD_RECORD 18     WHERE (swipe_date >= @date AND swipe_date < @date2) AND card_id=@card_id19     ORDER BY swipe_date ASC20     21     SET @char = CASE WHEN @char = '' THEN '' ELSE SUBSTRING(@char,1,LEN(@char)-1) END22     23     RETURN (@char)24 END25 GO

最后,把數據轉換一下,展示:

1 SELECT DISTINCT card_id,CONVERT(char(10),swipe_date,23) AS swipe_date,dbo.fn_time_list(swipe_date,card_id) AS time_list2 FROM CARD_RECORD 3 ORDER BY card_id ASC,swipe_date ASC4 GO

執行結果:

這里,還可以把豎向的刷卡時間,每個時間占一個字段,橫向顯示。不過會有刷卡次數的限制,一般來說,一天預留十次刷卡記錄應該是足夠了。

 1 WITH CTE1 AS ( 2     SELECT  3      card_id 4     ,CONVERT(CHAR(10),swipe_date,23) AS swipe_date 5     ,CONVERT(CHAR(5),swipe_date,108) AS swipe_time 6     FROM CARD_RECORD 7 ) 8  9 ,CTE2 AS (10     SELECT 11      ROW_NUMBER() OVER (PARTITION BY card_id,swipe_date ORDER BY card_id ASC,swipe_date ASC,swipe_time ASC) AS row_no12     ,card_id13     ,swipe_date14     ,swipe_time15     FROM CTE116 )17 18 SELECT 19  t1.card_id20 ,t1.swipe_date21 ,t1.swipe_time AS time122 ,ISNULL(t2.swipe_time,'') AS time223 ,ISNULL(t3.swipe_time,'') AS time324 ,ISNULL(t4.swipe_time,'') AS time425 ,ISNULL(t5.swipe_time,'') AS time526 ,ISNULL(t6.swipe_time,'') AS time627 ,ISNULL(t7.swipe_time,'') AS time728 ,ISNULL(t8.swipe_time,'') AS time829 ,ISNULL(t9.swipe_time,'') AS time930 ,ISNULL(t10.swipe_time,'') AS time1031 32 FROM CTE2 AS t133 LEFT JOIN CTE2 AS t2 ON t2.card_id = t1.card_id AND t2.swipe_date = t1.swipe_date AND t2.row_no = 234 LEFT JOIN CTE2 AS t3 ON t3.card_id = t1.card_id AND t3.swipe_date = t1.swipe_date AND t3.row_no = 335 LEFT JOIN CTE2 AS t4 ON t4.card_id = t1.card_id AND t4.swipe_date = t1.swipe_date AND t4.row_no = 436 LEFT JOIN CTE2 AS t5 ON t5.card_id = t1.card_id AND t5.swipe_date = t1.swipe_date AND t5.row_no = 537 LEFT JOIN CTE2 AS t6 ON t6.card_id = t1.card_id AND t6.swipe_date = t1.swipe_date AND t6.row_no = 638 LEFT JOIN CTE2 AS t7 ON t7.card_id = t1.card_id AND t7.swipe_date = t1.swipe_date AND t7.row_no = 739 LEFT JOIN CTE2 AS t8 ON t8.card_id = t1.card_id AND t8.swipe_date = t1.swipe_date AND t8.row_no = 840 LEFT JOIN CTE2 AS t9 ON t9.card_id = t1.card_id AND t9.swipe_date = t1.swipe_date AND t9.row_no = 941 LEFT JOIN CTE2 AS t10 ON t10.card_id = t1.card_id AND t10.swipe_date = t1.swipe_date AND t10.row_no = 1042 43 WHERE t1.row_no = 144 ORDER BY t1.card_id ASC,t1.swipe_date ASC45 GO

最后的效果:

======= 以下代碼減少了CTE虛擬表LEFT JOIN的次數,效率更高。修改于2015-06-24 19:22 ===========

 1 ;WITH CTE3 AS ( 2     SELECT  3      card_id 4     ,CONVERT(CHAR(10),swipe_date,23) AS swipe_date 5     ,CONVERT(CHAR(5),swipe_date,108) AS swipe_time 6     FROM CARD_RECORD 7 ) 8  9 ,CTE4 AS (10     SELECT 11      ROW_NUMBER() OVER (PARTITION BY card_id,swipe_date ORDER BY card_id ASC,swipe_date ASC,swipe_time ASC) AS row_no12     ,card_id13     ,swipe_date14     ,swipe_time15     FROM CTE316 )17 18 SELECT 19  card_id20 ,swipe_date21 ,MAX(CASE WHEN row_no = 1 THEN swipe_time ELSE '' END) AS time122 ,MAX(CASE WHEN row_no = 2 THEN swipe_time ELSE '' END) AS time223 ,MAX(CASE WHEN row_no = 3 THEN swipe_time ELSE '' END) AS time324 ,MAX(CASE WHEN row_no = 4 THEN swipe_time ELSE '' END) AS time425 ,MAX(CASE WHEN row_no = 5 THEN swipe_time ELSE '' END) AS time526 ,MAX(CASE WHEN row_no = 6 THEN swipe_time ELSE '' END) AS time627 ,MAX(CASE WHEN row_no = 7 THEN swipe_time ELSE '' END) AS time728 ,MAX(CASE WHEN row_no = 8 THEN swipe_time ELSE '' END) AS time829 ,MAX(CASE WHEN row_no = 9 THEN swipe_time ELSE '' END) AS time930 ,MAX(CASE WHEN row_no = 10 THEN swipe_time ELSE '' END) AS time1031 32 FROM CTE433 GROUP BY card_id,swipe_date34 ORDER BY card_id ASC,swipe_date ASC35 36 GO


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本成人免费在线| 日本免费在线精品| 欧美激情va永久在线播放| 久久综合网hezyo| 91久久久久久国产精品| 欧美午夜视频一区二区| 亚洲久久久久久久久久| 欧美日韩国产123| 性欧美xxxx交| 夜夜嗨av色综合久久久综合网| 欧美激情视频网址| 中文字幕亚洲图片| 久久男人资源视频| 美女福利视频一区| 国产综合在线观看视频| 亚洲欧美999| 欧美综合第一页| 日韩欧美精品网站| 亚洲男女自偷自拍图片另类| 亚洲男女性事视频| 亚洲国产高清高潮精品美女| 国产精品欧美一区二区三区奶水| 日韩色av导航| 色偷偷亚洲男人天堂| 91豆花精品一区| 国产一区二区三区免费视频| 国产精品扒开腿爽爽爽视频| 国产精品色午夜在线观看| 亚洲人成电影网站色…| 国产精品一区专区欧美日韩| 欧美日韩精品在线| 欧美激情视频在线免费观看 欧美视频免费一| 日韩精品极品毛片系列视频| 久久99久久亚洲国产| 亚洲欧美另类在线观看| 亚洲黄色在线观看| 日韩美女激情视频| 欧美亚洲免费电影| 国产精品久久网| 国产亚洲精品美女| 国产激情久久久| 欧美精品在线观看91| 91香蕉嫩草神马影院在线观看| 欧美高清性猛交| 国产精品三级久久久久久电影| 亚洲精品视频免费| 45www国产精品网站| 亚洲国产精品推荐| 国产精品久久999| 7m精品福利视频导航| 日韩精品久久久久久久玫瑰园| 不卡在线观看电视剧完整版| 国产精品爱啪在线线免费观看| 在线观看国产精品日韩av| 日韩av色在线| 亚洲欧洲日本专区| 在线色欧美三级视频| 精品久久久久久电影| 亚洲第一网站男人都懂| 久久成人免费视频| 欧美日韩加勒比精品一区| 日韩精品欧美激情| 亚洲精品456在线播放狼人| 欧美视频中文在线看| 亚洲午夜精品久久久久久久久久久久| 日韩69视频在线观看| 日本欧美中文字幕| 国产精品丝袜久久久久久高清| 亚洲精品97久久| 成人免费看吃奶视频网站| 久久6免费高清热精品| 国产在线播放不卡| 成人情趣片在线观看免费| 国产a∨精品一区二区三区不卡| 成人网址在线观看| 在线观看欧美成人| 亚洲成人a级网| 福利视频第一区| 超碰日本道色综合久久综合| 日本不卡视频在线播放| 国产精品久久久久久婷婷天堂| 成人夜晚看av| 精品福利一区二区| 日韩hd视频在线观看| 国产成人精彩在线视频九色| 久久久久久久久网站| 久久精品电影一区二区| 国产主播精品在线| 97国产一区二区精品久久呦| 久久久噜久噜久久综合| 欧美丝袜一区二区三区| 亚洲a成v人在线观看| 日韩精品在线视频美女| 亚洲精品国产综合久久| 久久91亚洲人成电影网站| 成人福利免费观看| 国产在线播放91| 久久精品国产欧美亚洲人人爽| 国产精品色视频| 国产精品久久久久国产a级| 久久免费国产精品1| 国外视频精品毛片| 亚洲欧洲国产精品| 热re99久久精品国产66热| 日韩欧美高清视频| 日韩欧美亚洲综合| 亚洲精品久久在线| 日韩av电影在线播放| 97人人模人人爽人人喊中文字| 欧美乱人伦中文字幕在线| 97视频人免费观看| 成人黄色av网站| www国产亚洲精品久久网站| 欧美在线欧美在线| 欧美色另类天堂2015| 裸体女人亚洲精品一区| 精品国产91久久久| 日韩中文字幕视频在线观看| 国产一区二区丝袜高跟鞋图片| 欧美亚洲成人xxx| 91久久久久久久一区二区| 国产精品亚洲一区二区三区| 蜜月aⅴ免费一区二区三区| 国产视频亚洲精品| 亚洲天堂网在线观看| 日韩精品免费电影| 午夜精品一区二区三区在线播放| 国产精品尤物福利片在线观看| 国产精品久久久久久久久久小说| 欧美成人在线免费| 2019中文字幕免费视频| 亚洲三级黄色在线观看| 日韩欧美在线字幕| 欧美午夜www高清视频| 日韩欧美中文字幕在线播放| 777777777亚洲妇女| 亚洲人成免费电影| 欧美精品videofree1080p| 日本电影亚洲天堂| 97精品伊人久久久大香线蕉| 色哟哟亚洲精品一区二区| 色999日韩欧美国产| 欧美激情a在线| 欧美日韩免费一区| 裸体女人亚洲精品一区| 原创国产精品91| 一本一本久久a久久精品综合小说| 亚洲人a成www在线影院| 欧美精品电影免费在线观看| 亚洲国产欧美在线成人app| 亚洲第一av网| 精品视频在线播放| 国产精品扒开腿做爽爽爽男男| 国产狼人综合免费视频| 2019中文字幕在线观看| 国产情人节一区| 国产日本欧美一区二区三区在线| 亚洲精品一区av在线播放| 亚洲国产一区二区三区四区| 伊人亚洲福利一区二区三区| 91精品国产综合久久香蕉最新版| 日本欧美爱爱爱| 成人黄色中文字幕| 日韩中文在线中文网三级|