寻找优雅的(或任何)解决方案以将列转换为行。
这是一个示例:我有一个具有以下架构的表:
[ID] [EntityID] [Indicator1] [Indicator2] [Indicator3] ... [Indicator150]
这是我想要得到的结果:
[ID] [EntityId] [IndicatorName] [IndicatorValue]
结果值为:
1 1 'Indicator1' 'Value of Indicator 1 for entity 1'
2 1 'Indicator2' 'Value of Indicator 2 for entity 1'
3 1 'Indicator3' 'Value of Indicator 3 for entity 1'
4 2 'Indicator1' 'Value of Indicator 1 for entity 2'
等等..
这有意义吗?您对在哪里看以及如何在T-SQL中完成操作有任何建议吗?
您可以使用UNPIVOT函数将列转换为行:
select id, entityId,
indicatorname,
indicatorvalue
from yourtable
unpivot
(
indicatorvalue
for indicatorname in (Indicator1, Indicator2, Indicator3)
) unpiv;
请注意,要取消透视的列的数据类型必须相同,因此您可能必须在应用取消透视之前转换数据类型。
您还可以CROSS APPLY
与UNION ALL一起使用来转换列:
select id, entityid,
indicatorname,
indicatorvalue
from yourtable
cross apply
(
select 'Indicator1', Indicator1 union all
select 'Indicator2', Indicator2 union all
select 'Indicator3', Indicator3 union all
select 'Indicator4', Indicator4
) c (indicatorname, indicatorvalue);
根据您的SQL Server版本,您甚至可以将CROSS APPLY与VALUES子句一起使用:
select id, entityid,
indicatorname,
indicatorvalue
from yourtable
cross apply
(
values
('Indicator1', Indicator1),
('Indicator2', Indicator2),
('Indicator3', Indicator3),
('Indicator4', Indicator4)
) c (indicatorname, indicatorvalue);
最后,如果您有150列要取消透视,并且您不想对整个查询进行硬编码,则可以使用动态SQL生成sql语句:
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsUnpivot
= stuff((select ','+quotename(C.column_name)
from information_schema.columns as C
where C.table_name = 'yourtable' and
C.column_name like 'Indicator%'
for xml path('')), 1, 1, '')
set @query
= 'select id, entityId,
indicatorname,
indicatorvalue
from yourtable
unpivot
(
indicatorvalue
for indicatorname in ('+ @colsunpivot +')
) u'
exec sp_executesql @query;
如何将行交换到列,我有一个输出,如 我需要一个输出比如
本文向大家介绍SQLServer行转列实现思路记录,包括了SQLServer行转列实现思路记录的使用技巧和注意事项,需要的朋友参考一下 最近面试遇到了一道面试题,顿时有点迷糊,只说出了思路,后来百度了一下,整理了一下思路,于是记录下来,方便以后学习。(面试题请参见附件) 相关的数据表: 1.Score表 2.[User]表 SQL语句如下: --方法一:静态SQL --方法二:动态SQL
问题内容: 我是Sql的新手,但是将excel文档中的1000多个行插入到我的数据库中的最佳方法是什么(Sql Server2008。) 例如,我正在使用以下查询: 这很好用,但是插入1000条记录是有限制的,我有19000条记录,我真的不想做19条单独的插入语句,还有另一个问题,那就是公司ID总是相同的,那么有没有更好的方法呢写了19000次吗? 问题答案: Microsoft提供了带有SQL
node-sqlserver 是微软官方发布的 SQL Server 的 Node.js 的驱动程序。可允许 Windows 上运行的 Node.js 程序访问 SQL Server 和 Windows Azure SQL 数据库。 该项目托管在 Github 上。
sqlserver manager 是一个多功能sqlserver图形管理界面,支持自定义导入导出,自动扫描服务器,数据库。
主要内容:第1节. 查询数据,第2节. 对数据进行排序,第3节. 限制返回行数,第4节. 过滤数据,第5节. 连接表,第6节. 分组数据,第7节. 子查询,第8节. 集合运算符,第9节. 修改数据,第10节. 数据定义,第11节. SQL Server数据类型,第12节. 约束MS SQL Server是Microsoft开发的关系数据库管理系统(RDBMS)。 本产品专为存储其他应用程序所需的检索数据的基本功能而构建。 它可以在同一台计算机上运行,也可以在网络上运行。 本教程介绍了SQL Se
我在Wamp上使用symfony2,它连接在SQL服务器DB上。 当我开始与项目 一切都很好,速度很慢,但我的网站在127.0上还可以。0.1:8000,Doctrine2连接到sql server数据库时没有问题。 我的问题:当我localhost/MyProject/web/app_php.php(意味着我使用wamp而不是server: run)。Symfony抛出一个异常: PDOExc0
官方的SQLServer数据库的JDBC驱动程序 驱动类名:com.microsoft.sqlserver.jdbc.SQLServerDriver URL格式:jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]