SQL 服务器数据透视表查询 returns 只有一行
SQL Server pivot query returns only one row
我的数据是这样的:
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
我的数据是这样的:
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