SQL中合併多行記錄的方法總彙
-- Title: 在SQL中分類合併資料行
-- Author: dobear Mail(MSN): [email protected]
-- Environment: Vista + SQL2005
-- Date: 2008-04-22
-- =============================================================================
--1. 建立表,新增測試資料
CREATE
INSERT tb SELECT1, 'aa'
UNIONALLSELECT1, 'bb'
UNIONALLSELECT2, 'aaa'
UNIONALLSELECT2, 'bbb'
UNIONALLSELECT2, 'ccc'
--SELECT * FROM tb
/*
id value
----------- ----------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
(5 row(s) affected)
*/
--
----2.1 建立合併函式fn_strSum,根據id合併value值
GO
CREATEFUNCTION dbo.fn_strSum(@idint)
RETURNSvarchar(8000)
AS
BEGIN
DECLARE@valuesvarchar(8000)
SET@values=''
SELECT@values=@values+','+ value FROM tb WHERE id=@id
RETURNSTUFF(@values, 1, 1, '')
END
GO
-- 呼叫函式
SELECT id, VALUE = dbo.fn_strSum(id)
DROPFUNCTION dbo.fn_strSum
----2.2 建立合併函式fn_strSum2,根據id合併value值
GO
CREATEFUNCTION dbo.fn_strSum2(@idint)
RETURNSvarchar(8000)
AS
BEGIN
DECLARE@valuesvarchar(8000)
SELECT@values=isnull(@values+',', '') + value FROM tb WHERE id=@id
RETURN@values
END
GO
-- 呼叫函式
SELECT id, VALUE = dbo.fn_strSum2(id) FROM tb GROUPBY id
DROPFUNCTION dbo.fn_strSum2
--3 在SQL2005中的新解法
----3.1 使用OUTER APPLY
SELECT*
FROM (SELECTDISTINCT id FROM tb) A OUTER APPLY(
SELECT[values]=STUFF(REPLACE(REPLACE(
(
SELECT value FROM tb N
WHERE id = A.id
FOR XML AUTO
), '<N value="', ','), '"/>', ''), 1, 1, '')
)N
----3.2 使用XML
SELECT id, [values]=STUFF((SELECT','+[value]FROM tb t WHERE id=tb.id FOR XML PATH('')), 1, 1, '')
FROM tb
GROUPBY id
--4 刪除測試表tb
droptable tb
/*
id values
----------- --------------------
1 aa,bb
2 aaa,bbb,ccc
(2 row(s) affected)
*/
相關推薦
SQL中合併多行記錄的方法總彙
-- =============================================================================-- Title: 在SQL中分類合併資料行-- Author: dobear Mail(MSN): [email prote
SqlServer和Oracle從多行記錄(資料集)中查詢結果並拼接成一個字串的SQL語句(縱表資料轉成拼接的文字)
使用情景: 例如:需要從學生成績表中,查詢分數大於95分的所有學生編號,用逗號分隔成一個字串。 準備測試資料: create table score (id int,score int) insert into score values(1,90) insert into
用SQL將Oracle中同一列的多行記錄拼接成一個字串
-- 原始資料 -- a 111 -- b 222 -- a 333 -- a 444 -- b 555 -- 最終結果 -- a 111*333*444 SELECT L4.L_TIME ,MAX(SUBSTR(L4.分組內容,2)) 最終欄位
sql 如何同時更改一列中的多行值
sql如圖,我要把 pre_tel 列 都加上 010 或者其他區號,但是如何用同一條 sql 語句實現?sql 如何同時更改一列中的多行值
SQL中將某個表中的多行數據在一個字段顯示
ack 查詢 style 顯示 isp dex OS AC for 項目需求:將某個表中的多行數據在一個字段顯示,如下: 比如表A中有字段 ID,NAME, 表B中有字段ID,PID,DES, 表A,表B中的數據分別如下: ID NAME1 張三2 李四 ID PID DE
sql資料庫:根據某分隔符將一條記錄拆分為多行記錄
需要通過身份證號聯表查詢比對,可是房產登記的身份證可能不止一個,查詢的時候只能比對一個身份證號的 所以需要 根據某分隔符將一條記錄拆分為多行記錄 從網上找到一個例子 create table tb(id int,value varchar(30)) insert into
SQL中用insert into插入一行或多行記錄
INSERT INTO插入一行記錄: INSERT INTO tablename values(v1,v2,...); --這裡需包括所有列的值 若只向指定列插入值: INSERT INTO tablename (column1,co
[Hive]用concat_w實現將多行記錄合併成一行
建表如下: # 建立商品與促銷活動的對映表 hive -e "set mapred.job.queue.name=pms; set hive.exec.reducers.max=32; set ma
css 中讓多行內容垂直居中的方法
HTML程式碼: <div class="textList"> <p>為您提供世界級的包裝產品,我們完善的管理體系為您確保產品質量可靠穩定&l
mysql中的多行查詢結果合併成一個
SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 AND md.user_id=17: 利用函式:group_concat(
在dbgrid中如何多行選中記錄(ctl與shift均可用)
在dbgrid中如何多行選中記錄(ctl與shift均可用),設定dbgrid的dgmultiselect為true,只有ctl好用而shift不好用,如何使shift也好用 Dbgrid原始碼:procedure TCustomDBGrid.KeyDown(var Key:&nbs
LaTex中多行註釋方法
解決方法: 1. 單行註釋:直接加入%即可; 2. 多行註釋:使用\usepackage{verbatim}巨集包,然後在待註釋的部分上加入\begin{comment} ... \end{co
eclipse中快速多行註釋的方法以及Myeclipse快捷
1.選中你要加註釋的區域,用ctrl+shift+C 會加上//註釋 2.先把你要註釋的東西選中,用shit+ctrl+/ 會加上/* */註釋 3.要修改在eclispe中的命令的快捷鍵方式我們只需進入windows -> preference ->
LaTeX中表格多行顯示的最簡單設定方法
這其實是一個很簡單的問題,但是這兩天發現我之前的解決方案太麻煩了。簡單介紹一下這種最簡單的方法: 之前設定多行顯示的時候,用類似於下面這種方法進行多行顯示: \begin{table} \newcommand{\tabincell}[2]{\begin{tabular}
SQL語句中把多條記錄同一欄位的值連線成一個字串顯示結果集(sql stuff)
SELECT STUFF('abcdef', 2, 3, 'ijklmn'); 結果:aijklmndf。 1. if object_id('[tb]') is not null drop table [tb] go create table [tb]([Inv] int
sql 分隔符字串轉換成表以及多行記錄列值轉換成字串
--1. 字串(分隔符分隔組成的字串)轉換成多行記錄的表 -- Function create FUNCTION [dbo].[fn_Split1]( @String nvarchar (max), @Delimiter nvarchar (10)
SQL 合併多個記錄 --GROUP_CONCAT 用法
例子: 表資料:(SELECT id,title FROM doc) id title2 aa2 cc3 dd…… 期望返回結果:"aa,cc,dd" 執行語句:SELECT GROUP_CONCAT(title) AS title FROM doc 期望返回
循環刪除DataTable.Row中的多行問題
datarow for datatable eight nbsp family let -- 永遠 在C#中,如果要刪除DataTable中的某一行,大約有以下幾種辦法: 1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows
mysql中的多行查詢結果合並成一個(轉)
get asc 數據 利用 sel tor _id and ont SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 AND
過濾文件中的空行解決方法
linux方法1:基礎方法[[email protected] ~]# grep -v "^$" oldboy.txt[[email protected] ~]# sed ‘/^$/d‘ oldboy.txt[[email protected] ~]# awk ‘!/^$/‘ o