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