比较 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
我确实在 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