1. 程式人生 > 其它 >SQL server 把多條記錄查詢結果合併成一條記錄

SQL server 把多條記錄查詢結果合併成一條記錄

SQL server 把多條記錄結果合併成一條記錄
表 users 的屬性有 name, dept_id等。
我們要查詢部門所屬的員工有哪些,使用以下程式碼塊,查詢結果為:

select
dept.dname 部門名稱, users.name 員工名稱
from
dept, users
where dept.did = users.dept_id;

那麼,要把同部門的員工放到同一行,我們需要怎麼做呢?如下:

我們要查詢各部門的所有員工,結果如下:

可以使用以下語句:

select -- distinct 是因為部門編號會出現多次,待會會有多餘的記錄出現
distinct dept_id , [員工] 
=( -- 假設此處的部門編號 dept_id 為 num1 -- 把【員工】看成一個變數,變數的值為部門編號 為 num1 的所有員工名 select [name] + ',' -- 名字間用逗號隔開 from users A -- 表A where A.dept_id = B.dept_id -- 判斷部門編號是否為 num1,是的話就新增該員工名 for xml Path('')) from users B; -- 表B

再通過多表查詢,可以得到以下結果:
(dept 表的 did屬性為 users 表的 dept_id屬性的外來鍵,通過外來鍵我們可以找到部門名稱)

使用的SQL語句為:

select
dept.dname as 部門名稱, 員工
from
(
select -- distinct 是因為部門編號會出現多次,待會會有多餘的記錄出現
distinct dept_id , [員工] =( -- 假設此處的部門編號 dept_id 為 num1
-- 把【員工】看成一個變數,變數的值為部門編號 為 num1 的所有員工名
select
[name] + ',' -- 名字間用逗號隔開
from
users A -- 表A
where
A.dept_id = B.dept_id -- 判斷部門編號是否為 num1,是的話就新增該員工名
for xml Path(''
)) from users B -- 表B ) as C , dept -- 把上面的查詢結果作為表C where C.dept_id = dept.did;