gpt4 book ai didi

sql - 行插入列 SQL Server 2005/8

转载 作者:行者123 更新时间:2023-12-03 02:32:20 27 4
gpt4 key购买 nike

我刚刚开始深入了解 SQL Server,但遇到了一个问题。我必须将行转换为列,但我无法弄清楚。

该行如下所示:

   Columns:      T1 T2 T3 .........T20
Values: 1 0 9 ......... 15

我想要收到这样的东西:

    Col  Val
________
T1 1
T2 0
T3 9
........
T20 15

我知道我必须使用枢轴,我已经阅读过相关内容,但无法弄清楚

最佳答案

您必须使用UNPIVOT表运算符,如下所示:

SELECT col, val
FROM Tablename AS t
UNPIVOT
(
Val
FOR Col IN (T1, T2, ..., T20)
) AS u;

SQL Fiddle Demo .

<小时/>

更新 1

如果您想对任意数量的列动态执行此操作,而不需要手动编写它们,我能想到的唯一方法是从表 information_schema.columns 中读取这些列获取表的列名列表。然后使用动态 SQL 动态地编写语句 FOR col IN ...,如下所示:

DECLARE @cols AS NVARCHAR(MAX);
DECLARE @query AS NVARCHAR(MAX);

select @cols = STUFF((SELECT distinct ',' +
QUOTENAME(column_name)
FROM information_schema.columns
WHERE table_name = 'tablename'
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
, 1, 1, '');

SELECT @query = ' SELECT col, val
FROM tablename AS t
UNPIVOT
(
val
FOR col IN ( ' + @cols + ' )
) AS u;';

EXECUTE(@query);

Updated SQL Fiddle Demo

这会给你:

| COL | VAL |
-------------
| T1 | 1 |
| T10 | 15 |
| T11 | 33 |
| T12 | 31 |
| T13 | 12 |
| T14 | 10 |
| T15 | 12 |
| T16 | 9 |
| T17 | 10 |
| T18 | 2 |
| T19 | 40 |
| T2 | 0 |
| T20 | 21 |
| T3 | 9 |
| T4 | 2 |
| T5 | 3 |
| T6 | 10 |
| T7 | 14 |
| T8 | 15 |
| T9 | 20 |

关于sql - 行插入列 SQL Server 2005/8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958442/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com