您将需要使用row_number()
到每个编号由CompName
PartNo,CompName
(-1分区启动从0开始)用于pivot()
。
我已将isnull(nullif(...,0,'') to turn
0使用到空字符串中。
对于动态枢使用您的数据。例如:
declare @cols nvarchar(max);
declare @sql nvarchar(max);
select @cols = stuff((
select distinct
',' + quotename(CompName
+isnull(nullif(convert(nvarchar(10),row_number() over (
partition by PartNo,CompName
order by CompNo
)-1),0),'')
)
from Xrefs
for xml path (''), type).value('.','nvarchar(max)')
,1,1,'');
select @sql = '
select PartNo, ' + @cols + '
from (
select
PartNo
, rn=CompName+isnull(nullif(convert(nvarchar(10),row_number() over (
partition by PartNo,CompName
order by CompNo
)-1),0),'''')
, CompNo
from Xrefs
) as a
pivot (max([CompNo]) for [rn] in (' + @cols + ')) p';
select @sql as CodeGenerated;
exec sp_executesql @sql;
rextester演示:http://rextester.com/XMXA2432
回报:
+--------+--------+---------+--------------+--------+----------------+------------+------------+------------+
| PartNo | A.B.S. | amk | APEC braking | ATE | ATE1 | AUDI | AUDI1 | AUDI2 |
+--------+--------+---------+--------------+--------+----------------+------------+------------+------------+
| BC2095 | 520831 | TCA3135 | LCA235 | 220635 | 24.3384-1755.7 | 1K0615423A | 1K0615423D | 1K0615423J |
+--------+--------+---------+--------------+--------+----------------+------------+------------+------------+
这里大部分人都希望格式化文本,没有图像 - 或者更糟 - 图像链接。 – jarlh
这个答案可以帮助你:https://stackoverflow.com/questions/46391146/transform-rows-into-columns-ms-sql/46391999#comment79741931_46391999 –
可能是一个'PIVOT'会是你以后但我怀疑您需要根据Comp Name值动态生成它。你能否提供更多来自外部参照表的细节(如jarlh所说的格式化文本) – SQLBadPanda