【发布时间】:2018-04-28 02:00:39
【问题描述】:
我有一个联合所有表的视图,一个人可能属于一个或多个表。 我如何创建一个查询,该查询将添加一个带有“;”的列以人所属的地方为界,ID 对每个人都是唯一的。 这是示例
--table1
PID fName tableMem
1 test group1
2 test2 group1
--table2
PID fName tableMem
1 test group2
3 test3 group2
--table3
PID fName tableMem
1 test group3
3 test3 group3
这是我想要的输出
--compiled table after union of all the 3 tables
PID fname tableMem
1 test group1;group2;group3
2 test2 group1
3 test3 group2;group3
这是我过去 2 天在此处阅读时构建的查询。我正在使用 STUFF 和分区,因为我需要使行不同,并且此查询将作为视图运行。
SELECT *
FROM
(SELECT
*,
ROW_NUMBER() OVER(PARTITION BY PIP ORDER BY Fname) AS rownum
FROM
(SELECT
*,
STUFF((SELECT ';'+ di.tablemem
FROM DPI di <<-- alias table from union
WHERE DPI.PID = di.PID
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') tablemem
FROM
(SELECT *
FROM
(--table1
SELECT 'group1' AS tableMem, * FROM table1
UNION ALL
--table2
SELECT 'group2' AS tableMem, * FROM table2
UNION ALL
--table3
SELECT 'group3' AS tableMem, * FROM table3) AS DPI <<--alias table name
) AS innertable
) AS distinctTable
) AS outerTable
WHERE
rownum = 1
我遗漏了什么或查询有什么问题。我猜是因为我使用了联合子选择的派生表名。有什么解决办法吗?
提前谢谢你
【问题讨论】:
标签: sql-server tsql