201010291712[SQL] 多筆資料合併為一筆 - 991206updated

談到SQL合併欄位通常有兩種意思,一個是將多個欄位合併為一個欄位來顯示,例如:SELECT 'FirstName'+'LastName' from UserT,另一個則是將多筆資料,給合併在一個欄位來呈現,例如:一筆訂單同時購買了多項產品,我希望在產出報表時,能同時看到消費者購買的清單。

第一種情況:將數個欄位合併顯示

舉例:有些資料表會將員工的名字與姓氏分開儲存,有時候又會希望顯示時不要分開



合併就簡單的使用「+」來將多個欄位給串接起來



第二種情況是:有兩個資料表,一個記載使用者相關資訊,另一個記錄該使用者詳細的購買紀錄,公司決策人員希望能看到每個使用者的基本資料及購物清單,但不在意購買的數量、折扣...等太細項的資料。

於是你必須將兩個資料表做一個彙整,以產出需要的報表

當然這個動作也可以作用在一張資料表的情況,就看你當中的 subquery 怎麼處理


下了 subquery 無法正常的執行,系統回報 subquery 不只回傳一個值

---- 該怎麼辦呢? -----

很簡單的,只要加了「FOR XML PATH('')」就能幫你搞定他


該注意的地方:

 

  1. 要用 Distinct 或 Group By 過濾重複的
  2. 若上例 ProductID 欄位為整數 Int 型態,則無法直接利用串接符號來隔開,可以用「+」或「-」使其語法不會有誤,但執行出來的結果也不會是你要的。
~ End

use [admAdventureWorks]
SELECT [SalesOrderID],
(
SELECT [ProductID] + ',' FROM [sales].[SalesOrderDetail] as s2
WHERE s1.SalesOrderID=s2.SalesOrderID
FOR XML PATH('')
) as ProductID
  FROM [sales].[SalesOrderDetail] as s1
group by [SalesOrderID],[ProductID]

 QQ: 那如果就是會要數字跟字串欄位作字串串接怎麼辦?
A:
其實只要將數字欄位利用
cast([ProductID] as nvarchar)
來轉換就好了

回應
Google Search
Google
平均分數:0 顆星
投票人數:0
我要評分:
Google