sql-server - SQL Server 数据透视查询仅返回一行

标签 sql-server pivot

我的数据是这样的:

ID  ColumnName  columnnvalue
----------------------------- 
13  seraialnew   tester name
13  serial        123123
13  seraialnew    am444
13  serial        33333


SELECT  id,seraialnew,serial
  FROM (
   SELECT id,columnnvalue, ColumnName  FROM dbo.formValues
  ) cols
PIVOT(
    MAX(id)
    FOR ColumnName IN(seraialnew,serial)
)p

并获得单行结果而不是多行结果

最佳答案

如果您获得相同的id,则只有一个字符串,因此我更改了您的两行的id:

;WITH formValues AS (
SELECT *
FROM (VALUES
(13,'seraialnew','tester name'),
(13,'serial','123123'),
(14,'seraialnew','am444'),
(14,'serial','33333')
) as t(ID, ColumnName, columnnvalue)
)

SELECT  id,seraialnew,serial
  FROM (
   SELECT id,columnnvalue, ColumnName
   FROM formValues
  ) cols
PIVOT(
    MAX(columnnvalue)
    FOR ColumnName IN(seraialnew,serial)
)p

会给你:

id  seraialnew  serial
13  tester name 123123
14  am444       33333

另一种方式:

SELECT *
FROM (
    SELECT  id,
            columnnvalue,
            ColumnName+CAST(ROW_NUMBER() OVER (PARTITION BY ColumnName ORDER BY ColumnName) as nvarchar(1)) as ColumnName
    FROM formValues
) cols
PIVOT(
    MAX(columnnvalue)
    FOR ColumnName IN(seraialnew1,serial1,seraialnew2,serial2)
)p

使用相同的id = 13会给你这个:

id  seraialnew1 serial1 seraialnew2 serial2
13  am444       33333   tester name 123123

关于sql-server - SQL Server 数据透视查询仅返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139201/

相关文章:

java - 使用 Java 检查 SQL 服务器是否在线

sql - 如何在SQL中从XML中获取指定的节点

php - json_encode 为以项目符号为字符的字段返回 null

mysql - 在舍入值上滚动 SQL Pivot

mysql - 多个内部连接 ​​- MySQL

sql - SQL Server Profiler 中的 filetable_updates 表

asp.net - SQL Server 许可证 - Winforms 还是 Web 应用程序?

mysql - Laravel 数据透视表 - 如何用计数器增加第三个字段?

python - 如何旋转数据框

mysql - SQL 使用行作为列