2012年12月17日 星期一

[SQL] 多欄位查詢結果合併成一個字串

同個Row的兩個欄位(或N個欄位) 使用+ 來連接成一個欄位!

sqlQuery1:
SELECT (e.zhFname+e.zhName) as zhName,(e.enName+'  '+e.enFname) as enName FROM table

顯示結果:
zhName = "志玲"
enName = "LiYin Lin"

sqlQuery2:
SELECT (convert(nvarchar(4),系統ID) + '(' + 系統名稱 + ')') as 系統 FROM [Usys系統別資料表] WHERE 系統ID <> 0

顯示結果:
系統 = 1(內銷業務管理)

Note:
若有某一欄位型態不是字串(EX:integer ,double, etc... 日期沒試過~)
就必須 (convert(nvarchar(10),系統ID) 轉成字串

假設原本資料庫設定為 int(4) 其可表示範圍為
 - 2,147,483,647 ~ 2,147,483,647 
0~4,294,967,295 兩者皆為10位數

故轉字串時 就必須設 nvarchar(10) OR varchar(10)
否則會產生溢位錯誤...

參考:
select firstname+lastname from tb1;
用  +  做連接
+ (字串串連) (Transact-SQL)
CONCAT( ) 的語法
SQL Server 2012 :認識 CONCAT 字串函數

M$ sqlserver 2005
SQL 語法如何將多欄位查詢結果合併成一個字串
如何將多行查詢結果合併成單一字串?
SQL指令— CONCAT(字符串连接函数)
SQL 合并字段、拼字段、把多个数值拼写成一个字段。

===================================================
不同ROW的同一個欄位運用 FOR XML PATH 來連接成一個欄位!

資料結構:

語法 FOR XML PATH 之後的資料:

  select [pro] from yiTest.dbo.person for xml path('');

  select [pro]+',' from yiTest .dbo.person for xml path('');

  SELECT
  (
  (SELECT ','+[pro]
  FROM [yiTest].[dbo].[person] t2
  --WHERE t2.id = t1.id
  FOR XML PATH('')
  )
  )as [pro]
  FROM
  [yiTest].[dbo].[person] t1

    SELECT
  (
  (SELECT ','+[pro]
  FROM [yiTest].[dbo].[person] t2
  WHERE t2.id = t1.id
  FOR XML PATH('')
  )
  )as [pro]
  FROM
  [yiTest].[dbo].[person] t1

  select id,name,
  (select ','+pro from yiTest .dbo.person t1 where t1.id = t2.id for xml path('')) pro
  from yiTest.dbo.person t2
  group by id,name

參考:
SQL SERVER 2005 以後才支援 FOR XML PATH
SQL SERVER 2012 以後微軟提供了 CONCAT函數 來實現此功能
Concatenate the values in a column in SQL Server 2000 and 2005
使用 PATH 模式
一秒看破 T - SQL 多筆欄位合併
SQL 合并多条记录为一条
[SQL]將多筆資料合併為一筆顯示(FOR XML PATH)
[SQL]將多筆資料同一欄位值合併
[SQL] 多筆資料合併為一筆
灵活运用 SQL SERVER FOR XML PATH
SQL Server 2005 “FOR XML PATH” Multiple tags with same name
[MS SQL]將多筆資料合併欄位,減少不必要的連線
將多筆相同鍵值的欄位內容合併
T-SQL多筆輸出資料合併單一欄位輸出
使用 MSSQL 打造仿 MySQL 的group_concat 函数的山寨版
SQL語法如何將直的資料做橫向的字串連結
mssql2005如何实现类似GROUP_CONCAT (my-sql) 的功能
GROUP_CONCAT In MS-SQL
Simulating group_concat MySQL function in Microsoft SQL Server 2005?
Emulating MySQL’s GROUP_CONCAT() Function in SQL Server 2005

FOR XML PATH 多筆資料合併為一筆
FOR XML PATH 多筆資料合併為一筆

其它參考:
動態將多筆資料的特定欄位依分隔符號組成字串
[SQL]利用UNION ALL整合統計合併資料
[Oracle]請問如果查詢條件無資料能否顯示筆數為 0 呢?
SQL不同TABLE相同欄位合併的方法
MS SQL多表查詢合併
SQL合併查詢?(超難)
[Oracle]多筆資料合併在同一列上
SQL2005/2008手工注入之批量爆数据for xml path

使用 PIVOT 和 UNPIVOT 讓資料多列變成一列
SQL - 使用 PIVOT
動態 PIVOT 陳述式:Dynamic PIVOT
SQL資料轉行
續:SQL 資料轉行

SQL SERVER 2000/2005 列转行 行转列

沒有留言:

張貼留言