使用
PIVOT表运算符,然后使用
INTO子句从数据透视表的列中创建新表。像这样的东西:
SELECt *INTO newtablenameFROM ( SELECt tag, value FROM tags) AS tPIVOT ( MIN(value) FOR tag in ([tag1], [tag2], [tag3], [tag4])) AS p;
在此处查看其运行情况:
- SQL小提琴演示
但是, 在这种情况下,您必须使用动态sql对表中的任意数量的标签动态地执行此 *** 作,而不是手动列出它们。像这样:
DECLARE @cols AS NVARCHAr(MAX);DECLARE @query AS NVARCHAr(MAX);select @cols = STUFF((SELECT distinct ',' + QUOTENAME(tag)FROM tagsFOR XML PATH(''), TYPE ).value('.', 'NVARCHAr(MAX)') , 1, 1, '');SELECt @query = 'SELECT * INTO newtablename FROM ( SELECt tag, value FROM tags) AS t PIVOT ( MIN(value) FOR tag in ( ' + @cols + ' ) ) AS p';execute(@query);
在此处查看其运行情况:
- SQL小提琴演示
这将创建一个名称
newtablename如下的全新表:
| TAG1 | TAG2 | TAG3 | TAG4 |-----------------------------| 123 | 854 | 923 | 44 |
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)