嘗試這一個 -
CREATE TABLE dbo.staff
(
company_id INT
, staff_name NVARCHAR(50)
, email NVARCHAR(50)
)
INSERT INTO dbo.staff (company_id, staff_name, email)
VALUES
(1, 'John', '[email protected]'),
(1, 'Mandy', '[email protected]'),
(2, 'Jane', '[email protected]'),
(3, 'Andy', '[email protected]')
CREATE TABLE dbo.client
(
company_id INT
, client_id INT
, client_name NVARCHAR(50)
, client_class NVARCHAR(50)
)
INSERT INTO dbo.client (company_id, client_id, client_name, client_class)
VALUES
(1, 1, 'a', '02'),
(2, 2, 'ss', '01'),
(2, 3, 'd', '08')
DECLARE
@Cols NVARCHAR(MAX)
, @SQL NVARCHAR(MAX)
SELECT @Cols =
STUFF((
SELECT DISTINCT ',' + QUOTENAME(c.client_id)
FROM dbo.client c
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
, 1 , 1, '')
SELECT @SQL = '
SELECT s.staff_name, s.email, d.*
FROM (
SELECT
company_id
, ' + @Cols + '
FROM (
SELECT name = client_name + ''('' + client_class + '')'', client_id, company_id
FROM dbo.client
) x
PIVOT
(
MAX(name)
FOR client_id IN (' + @Cols + ')
) p
) d
JOIN dbo.staff s ON s.company_id = d.company_id
'
EXEC sys.sp_executesql @SQL
SELECT s.company_id
, s.staff_name
, s.email
, c.clients
FROM dbo.staff s
OUTER APPLY (
SELECT clients = STUFF((
SELECT N', ' + c.client_name + '(' + c.client_class + ')'
FROM dbo.client c
WHERE c.company_id = s.company_id
FOR XML PATH(N''), TYPE, ROOT).value(N'root[1]', N'NVARCHAR(MAX)'), 1, 2, '')
) c
WHERE c.clients IS NOT NULL

歡迎StackOverflow上:如果您發佈的代碼,XML或數據樣本,** **請在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」),以便對其進行精確格式化和語法突出顯示! –