当前位置: 首页 > 面试题库 >

SQL Server行到列

司徒茂实
2023-03-14
问题内容

我的查询是:

SELECT vendor.id, insurances.id AS ins_id, vendor_insurances.expiry_date
FROM vendor
INNER JOIN vendor_insurances
ON vendor.id=vendor_insurances.vendor_id

和输出:

id    ins_id    expiry_date
================================
28    1         2006-01-01
28    11        2008-01-01

我想将其转换为:

id    1            11
======================================
28    2006-01-01   2008-01-01

谢谢,


问题答案:

您将需要使用PIVOT并执行以下操作:

静态数据透视-仅需透视几列

select *
from 
(
  SELECT v.id
    , vi.id AS ins_id
    , vi.expiry_date
  FROM vendor v
  INNER JOIN vendor_insurances vi
    ON v.id=vi.vendorId
) x
PIVOT
(
   MIN(expiry_date)
    FOR ins_id IN ([1], [11])
) p

或者,如果您有很多要发送到PIVOT的项目,则可以使用“动态数据透视表”:

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(vi.id) 
                  FROM vendor v
                  INNER JOIN vendor_insurances vi
                    ON v.id=vi.vendorId
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT id, ' + @cols + ' from 
             (
                SELECT v.id
                    , vi.id AS ins_id
                    , vi.expiry_date
                FROM vendor v
                INNER JOIN vendor_insurances vi
                    ON v.id=vi.vendorId
            ) x
            pivot 
            (
                MIN(expiry_date)
                for ins_id in (' + @cols + ')
            ) p '

execute(@query)

两者都会给您相同的结果。



 类似资料:
  • 如何将行交换到列,我有一个输出,如 我需要一个输出比如

  • 问题内容: 我是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图形管理界面,支持自定义导入导出,自动扫描服务器,数据库。  

  • 问题内容: 我一直在尝试查找有关我的查询的问题。该查询实际上是由HQL的hibernate生成的,但是生成的SQL并没有达到我的期望。稍微修改SQL会产生正确的结果,但是我不确定为什么修改会有所不同。 原始查询(不返回任何行) 修改的查询-用逗号替换交叉联接(隐式交叉联接) 返回一行 我的理解可能是错误的,因为写作与Writing相同。所以我不明白为什么查询返回不同的结果。 与导致此问题的第一个查

  • 本文向大家介绍SQLServer行转列实现思路记录,包括了SQLServer行转列实现思路记录的使用技巧和注意事项,需要的朋友参考一下 最近面试遇到了一道面试题,顿时有点迷糊,只说出了思路,后来百度了一下,整理了一下思路,于是记录下来,方便以后学习。(面试题请参见附件) 相关的数据表: 1.Score表   2.[User]表   SQL语句如下: --方法一:静态SQL --方法二:动态SQL

  • 主要内容:第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