比较 SQL 服务器中的两个视图并创建生成 Table

Compare two Views in SQL Server and and create a gen Table

我确实在 SQL Server

中创建了两个视图

观看 1

NameID 1 2 3 4 Name A B C D

视图 2:

软件 ID 1 2 3 4 5 6 7<br> 名称 ID 1 1 1 3 3 2 2

我想从这样的视图创建一个 Gentable

名称 ID 1 2 3 4<br> 软件 ID 1,2,3, 6,7 4,5 NULL

我想对数据进行反规范化。那可能吗? 提前致谢

非常凌乱而且乱七八糟,但这会给你你想要的:

select distinct
v.NameID,
STUFF((SELECT ', ' + CAST(SoftwareID AS VARCHAR(10)) 
         FROM @view2 
         WHERE NameID = t.NameID
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
from View2 t
right join View1 v on t.NameID = v.NameID
IF OBJECT_ID('Tempdb..#Temp')IS NOT NULL
Drop table #Temp
;With View1(NameID,Name)
AS
(
SELECT 1,'A' UNION ALL
SELECT 2,'B' UNION ALL
SELECT 3,'C' UNION ALL
SELECT 4,'D' 
)
,View2(SoftwareID,NameID)
AS
(
SELECT 1,1UNion all
SELECT 2,1UNion all
SELECT 3,1UNion all
SELECT 4,3UNion all
SELECT 5,3UNion all
SELECT 6,2UNion all
SELECT 7,2
)
,Final
AS
(
SELECT v1.NameID,v2.SoftwareID from View1 v1
LEFT join View2 v2
On v1.NameID=v2.NameID
)
SELECT DISTINCT o.NameID,STUFF((SELECT DISTINCT ','+CAST(i.SoftwareID AS VARCHAR(5))
From Final i  WHERE i.NameID=o.NameID FOR XML PATH ('')),1,1,'') AS SoftwareID
FROM Final  o   

输出

NameID  SoftwareID
-------------------
1       1,2,3
2       6,7
3       4,5
4       NULL