2017-06-22 88 views
0

我没有在SQLServer,创建两个视图比较SQL服务器的两个视图和创造一个根表

VIEW 1

NameID 1 2 3 4 Name A B C D

查看2:

SoftwareID 1 2 3 4 5 6 7
NameID 1 1 1 3 3 2 2

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

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

我想非规格化数据。那可能吗? 在此先感谢

回答

0

非常混乱,丢在一起,但是这会给你想要的东西:

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 
0
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