[英]Dynamic SQL Server 2008 Query Join
嗨,我有下表:
CREATE TABLE #Test
(
ProductID int,
MainMasterFeatureID int,
--MasterFeatureValue Varchar(100),
ChilFeatureName varchar(100),
ParentFeatureName varchar(100)
)
INSERT INTO #Test
SELECT 40,1,,'Pack','Type'
UNION ALL
SELECT 40,0,'Laminate','Technology'
UNION ALL
SELECT 40,11,'Yes','Coated'
UNION ALL
SELECT 52,1,'Roll','Type'
UNION ALL
SELECT 52,11,'NO','Coated'
SELECT * FROM #Test
CREATE TABLE #tProduct
(
tProductID int PRIMARY KEY,
tProductCode nvarchar(128),
tProductName nvarchar(256)
)
INSERT INTO #tProduct
SELECT 40,'001','ABC'
UNION ALL
SELECT 52,'002','XYZ'
UNION ALL
SELECT 50,'006','IJK'
我想From #test table
生成如下结果:
ProductID Type Technology Coated
40 Pack Laminate YES
52 Roll Null No
此处类型,技术,涂层不固定,可以动态生成。
它可以这样生成...
Declare @sql Varchar(MAX)
Select @sql = 'SELECT ProductID, '
Select @sql = @sql + STUFF((Select DISTINCT ',MAX(Case When ParentFeatureName = ' + CHAR(39) + ParentFeatureName + CHAR(39) + ' Then ChilFeatureName Else ' + CHAR(39) + CHAR(39) + ' End) As ' + ParentFeatureName From #Test For XML PATH('')),1,1,'')
Select @sql = @sql + ' FROM #Test Group By ProductID'
Execute(@sql)
现在,我想将此动态查询加入#tProduct
以获得所需的结果:
tProductID tProductName Type Technology Coated
40 ABC Pack Laminate YES
52 XYZ Roll Null No
您可以使用动态数据透视表并在动态查询中加入#tProduct
来实现此#tProduct
declare @SQL nvarchar(max)
declare @FieldList nvarchar(max)
set @FieldList =
(
select distinct ','+quotename(ParentFeatureName)
from #Test
for xml path(''), type
).value('substring(text()[1], 2)', 'nvarchar(max)')
set @SQL =
'
select TP.tProductID,
TP.tProductName,'+
@FieldList+'
from
(
select ProductID,
ParentFeatureName,
ChilFeatureName
from #Test
) as T
pivot
(
max(T.ChilFeatureName)
for T.ParentFeatureName in ('+@FieldList+')
) as P
inner join #tProduct as TP
on P.ProductID = TP.tProductID'
exec(@SQL)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.