server多笔记录拼接字符串 sql_sqlserver 将多行数据查询合并为一条数据
有這樣一個需求:表T_FUN_TASK為任務表,有字段(TASKID,TASKNAME),表T_FUN_LOGBOOK為日志表,有字段(LOGID,TASKID,LOGDATE),一個任務可持續多天,每天會記錄一條日志。在查詢表T_FUN_TASK時,需將任務表中的 LOGDATE 查詢出來作為一列 LOGDATES顯示。
T_FUN_TASK
T_FUN_LOGBOOK
查詢結果
此結果查詢方法可以用存儲過程輕松實現,這里我要介紹的是sqlserver FOR XML PATH語句的應用,在SQL Server中利用 FOR XML PATH 語句能夠把查詢的數據生成XML數據
且合并為一條數據,看以下示例:
SELECT LOGDATE FROM T_FUN_LOGBOOK WHERE TASKID=231 FOR XML PATH
結果為:
2014-01-06T00:00:00
2014-01-07T00:00:00
在前面的需求中,我是想要把這2條數據合并到一起且沒有XML標簽,條與條之間用下劃線(_)分隔的,日期的格式也變為了2014/01/07的格式。下面來一步一步來完成需求。
首先,將日期格式轉化為需要的格式:
SELECT CONVERT(VARCHAR(100), LOGDATE, 111) FROM T_FUN_LOGBOOK WHERE TASKID=231 FOR XML PATH
結果變為:
2014/01/06
2014/01/07
可以發現,轉化字符卷的過程中,把logdate標簽給去掉了。現在我們要去掉標簽:
SELECT CONVERT(VARCHAR(100), LOGDATE, 111) FROM T_FUN_LOGBOOK WHERE TASKID=231 FOR XML PATH('')
在PATH后面將一個空的字符卷作為參數傳遞,就可以去掉標簽,結果:2014/01/062014/01/07。
現在兩條結果之間很難區分,需要用下劃線將其分隔開來,方法是在CONVERT函數前面加上一個下劃線:
SELECT '_'+CONVERT(VARCHAR(100), LOGDATE, 111) FROM T_FUN_LOGBOOK WHERE TASKID=231 FOR XML PATH('')
結果:_2014/01/06_2014/01/07。
在分析了FOR XML PATH語句之后,就來將這個查詢結果添加到對T_FUN_TASk的查詢結果中去。我的思路是先構建一個子查詢,然后查詢TASK表時LEFT JOIN這個子查詢:
SELECT T1.TASKID,'TASKNAME' AS TASKNAME,T2.LOGDATES FROM T_FUN_TASK T1
LEFT JOIN (SELECT TASKID,
LOGDATES=(SELECT '_'+CONVERT(VARCHAR(100), LOGDATE, 111) FROM T_FUN_LOGBOOK WHERE TASKID=T1.TASKID FOR XML PATH('')) FROM T_FUN_LOGBOOK T1
GROUP BY TASKID) T2 ON T2.TASKID=T1.TASKID
ORDER BY T1.TASKID ASC
運行以上SQL后得到的結果為:
發現LOGDATES值的第一個下劃線應該去掉,于是修改SQL,應用 STUFF函數去掉第一個下劃線:
SELECT T1.TASKID,'TASKNAME' AS TASKNAME,T2.LOGDATES FROM T_FUN_TASK T1
LEFT JOIN (SELECT TASKID,
LOGDATES=STUFF((SELECT '_'+CONVERT(VARCHAR(100), LOGDATE, 111) FROM T_FUN_LOGBOOK WHERE TASKID=T1.TASKID FOR XML PATH('')),1,1,'') FROM T_FUN_LOGBOOK T1
GROUP BY TASKID) T2
ON T2.TASKID=T1.TASKID
ORDER BY T1.TASKID ASC
將結果轉化為JSON 返回給前端之后,JS按照下劃線分隔這個字段的值,即可以得到一個任務下面日志的填寫情況。
GROUP_CONCAT 將mysql多條數據合并為一條
實現將多條數據合并為一條數據,在mysql中可以通過?GROUP_CONCAT 函數實現 上面是瀟leader發我的和工作不相關的小小小需求描述,很明顯是要把id和name相同的數據合并為一條,下面按 ...
mysql查詢隨機幾條數據(速度快)
MySql查詢隨機幾條數據 想到了 Max RAND 這幾個函數 用以下2種辦法都可以實現查詢. 速度還行. 幾十萬數據左右, 沒有什么問題. SELECT * FROM `news` WHERE i ...
不同數據庫,查詢前n條數據的SQL語句
不同的數據庫,支持的SQL語法略有不同,以下是不同數據庫查詢前n條數據的SQl語句 SQL Server(MSSQL) SELECT TOP n *?FROM table_name ORACLE SE ...
如何將多條update語句合并為一條
需求: 如何將多條update語句合并為一條update語句:如,update?table1?set?col='2012'?where?id='2014001'? ? ? update?table1? ...
SQL 一列數據整合為一條數據
SQL 一列數據整合為一條數據: SELECT ?STUFF(( SELECT distinct ?',' + 列名 FROM 表名 where ?[條件] FOR XML PATH('') ), 1 ...
[MSSQL]找出一天數據中從第一條數據開始每累加1小時的數據
用Sql Server找出一天數據中從第一條數據開始每累加1小時的數據 -- ============================================= -- Author: Alle ...
gridview 綁定多個格式相同的數據源(數據查詢合并)
在做項目時,要求在同一個GridView中同時顯示不同分組中的前若干條數據 幾個技術要點: 1.數據分組,本方法中未用group by 2.幾個結果格式相同的查詢合并綁定 3.取查詢結果的前或后若干條 ...
sqlserver中 多條數據合并成一條數據 (stuff 與 for xml path 連用)
SQL 列轉行,即多行合并成一條 ? 需求:按照分組,將多條記錄內容合并成一條,效果如下: 數據庫示例: CREATE TABLE [t2]([NID] [bigint] NULL,[district ...
SQL Server 分割字符串和合并多條數據為一行
分割字符串函數 create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20) ...
隨機推薦
juqery合成事件toggle方法
當指定元素被點擊時,在兩個或多個函數之間輪流切換. 如果規定了兩個以上的函數,則 toggle() 方法將切換所有函數.例如,如果存在三個函數,則第一次點擊將調用第一個函數,第二次點擊調用第二個函數, ...
spring mvc rest 方式
handler中編寫方式: @RequestMapping("/{userName}/ajaxUser3.do") @ResponseBody public UserInfo aj ...
Nginx的知識分享,技術分享
3. Nginx常用命令管理及升級 查看nginx進程 ps -ef|grep nginx 說明:nginx的進程由主進程和工作進程組成. 啟動nginx nginx 啟動結果顯示nginx的主線程和 ...
怎樣生成一個頂點迭代器(MItMeshVertex)
最近修改一個maya中的jlCollisionDeformer工具,該工具有一個明顯不足,變形后頂點分布太亂,無法滿足生產需求.于是考慮對該變形后的頂點進行平滑處理.既然要做平滑處理就要獲取當前點及與 ...
32bit GM命令
GM 命令[32位服務端GM命令] //announce message this basicly tells a announcement on the whole server.. you can ...
Scrapy模擬登錄GitHub
d: 進入D盤 scrapy startproject GitHub 創建項目 scrapy genspider github github.com 創建爬蟲 編輯github.py: # -*- c ...
ACS蟻群算法求解對稱TSP旅行商問題的JavaScript實現
本來以為在了解蟻群算法的基礎上實現這道奇怪的算法題并不難,結果實際上大相徑庭啊.做了近三天時間,才改成現在這能勉強拿的出手的模樣.由于公式都是圖片,暫且以截圖代替那部分內容吧,mark一記. 1 蟻群 ...
JAVA 面試須知
本篇文章會對面試中常遇到的Java技術點進行全面深入的總結,幫助我們在面試中更加得心應手,不參加面試的同學也能夠借此機會梳理一下自己的知識體系,進行查漏補缺. 1. Java中的原始數據類型都有哪些, ...
Android開發 使用 adb logcat 顯示 Android 日志
作者 : 萬境絕塵 ?轉載請著名出處 eclipse 自帶的 LogCat 工具太垃圾了, 開始用 adb logcat 在終端查看日志; 1. 解析 adb logcat 的幫助信息 在命令行中輸入 ...
JAVA中字符串問題
JAVA中對象創建 通過new關鍵字來創建對象 通過newInstance()方法來創建對象 使用反序列化機制中IO流中恢復Java對象 通過clone()方法復制一個對象 直接量方式,String ...
總結
以上是生活随笔為你收集整理的server多笔记录拼接字符串 sql_sqlserver 将多行数据查询合并为一条数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 批处理方式更改IE代理服务器
- 下一篇: 【浅析STM32之GPIO寄存器(CRL