varchar数据类型返回null的SQL PIVOT
我正在尝试透视sql表中的数据,以便每个记录id只获得一行。但是,我运行的代码始终返回空值作为最终结果 我的表格如下所示:varchar数据类型返回null的SQL PIVOT,sql,sql-server,pivot,Sql,Sql Server,Pivot,我正在尝试透视sql表中的数据,以便每个记录id只获得一行。但是,我运行的代码始终返回空值作为最终结果 我的表格如下所示: "Sequence" "University Issuing Body"** "1" "College1" "1" "College2" "2" "College1" "2" "College1" "2" "College2" 我需要的表格如下所示: "Sequence" "University Issuing Body1" "Uni
"Sequence" "University Issuing Body"**
"1" "College1"
"1" "College2"
"2" "College1"
"2" "College1"
"2" "College2"
我需要的表格如下所示:
"Sequence" "University Issuing Body1" "University Issuing Body2" "University Issuing Body3"
"1" "College1" "College2" "NULL"
"2" "College1" "College1" "College2"
select
Sequence]
,[University Issuing Body_1]
,[University Issuing Body_2]
,[University Issuing Body_3]
from (
select
[Sequence]
,[University Issuing Body]
,'University Issuing Body' + cast(row_number() over(partition by [Sequence] order by [University Issuing Body]) as varchar(12)) as hdg
from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined]
) d
pivot(
max([University Issuing Body])
for hdg in ([University Issuing Body_1], [University Issuing Body_2], [University Issuing Body_3])
)pvt
我正在运行的代码如下所示:
"Sequence" "University Issuing Body1" "University Issuing Body2" "University Issuing Body3"
"1" "College1" "College2" "NULL"
"2" "College1" "College1" "College2"
select
Sequence]
,[University Issuing Body_1]
,[University Issuing Body_2]
,[University Issuing Body_3]
from (
select
[Sequence]
,[University Issuing Body]
,'University Issuing Body' + cast(row_number() over(partition by [Sequence] order by [University Issuing Body]) as varchar(12)) as hdg
from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined]
) d
pivot(
max([University Issuing Body])
for hdg in ([University Issuing Body_1], [University Issuing Body_2], [University Issuing Body_3])
)pvt
但是,当我运行上述代码时,我的所有值都显示为null,并得到以下结果:
"Sequence" "University Issuing Body_1" "University Issuing Body_2" "University Issuing Body_3"
"1" "NULL" "NULL" "NULL"
"2" "NULL" "NULL" "NULL"
任何帮助都将非常感谢,因为我一直在网上寻找解决方案,但似乎找不到哪里出了问题
提前感谢。只需使用条件聚合:
select Sequence,
max(case when seqnum = 1 then [University Issuing Body] end) as University_Issuing_Body_1,
max(case when seqnum = 2 then [University Issuing Body] end) as University_Issuing_Body_2,
max(case when seqnum = 3 then [University Issuing Body] end) as University_Issuing_Body_3
from (select pqj.*
row_number() over (partition by [Sequence] order by [University Issuing Body]) as seqnum
from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined] pqj
) d
group by [University Issuing Body];
如果您确实想使用pivot
,则没有理由定义hdg
:
select [Sequence],
[1] as [University Issuing Body_1],
[2] as [University Issuing Body_2],
[3] as [University Issuing Body_3]
from (select [Sequence], [University Issuing ,Body]
row_number() over (partition by [Sequence] order by [University Issuing Body]) as seqnum
from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined]
) d
pivot (max([University Issuing Body])
for seqnum in (1, 2, 3)
)pvt
只需使用条件聚合:
select Sequence,
max(case when seqnum = 1 then [University Issuing Body] end) as University_Issuing_Body_1,
max(case when seqnum = 2 then [University Issuing Body] end) as University_Issuing_Body_2,
max(case when seqnum = 3 then [University Issuing Body] end) as University_Issuing_Body_3
from (select pqj.*
row_number() over (partition by [Sequence] order by [University Issuing Body]) as seqnum
from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined] pqj
) d
group by [University Issuing Body];
如果您确实想使用pivot
,则没有理由定义hdg
:
select [Sequence],
[1] as [University Issuing Body_1],
[2] as [University Issuing Body_2],
[3] as [University Issuing Body_3]
from (select [Sequence], [University Issuing ,Body]
row_number() over (partition by [Sequence] order by [University Issuing Body]) as seqnum
from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined]
) d
pivot (max([University Issuing Body])
for seqnum in (1, 2, 3)
)pvt
您正在使用hdg构建中间表,格式为大学发布机构
。但是你会在hdg格式为大学发行机构的地方提取出值。毫不奇怪,这与任何内容都不匹配——因此得到的是空值
只需在hdg的构造中加一个下划线:
select
[Sequence]
,[University Issuing Body_1]
,[University Issuing Body_2]
,[University Issuing Body_3]
from (
select
[Sequence]
,[University Issuing Body]
,'University Issuing Body_' + cast(row_number() over(partition by [Sequence] order by [University Issuing Body]) as varchar(12)) as hdg
from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined]
) d
pivot(
max([University Issuing Body])
for hdg in ([University Issuing Body_1], [University Issuing Body_2], [University Issuing Body_3])
) pvt
您正在使用hdg构建中间表,格式为大学发布机构。但是你会在hdg格式为大学发行机构的地方提取出值。毫不奇怪,这与任何内容都不匹配——因此得到的是空值
只需在hdg的构造中加一个下划线:
select
[Sequence]
,[University Issuing Body_1]
,[University Issuing Body_2]
,[University Issuing Body_3]
from (
select
[Sequence]
,[University Issuing Body]
,'University Issuing Body_' + cast(row_number() over(partition by [Sequence] order by [University Issuing Body]) as varchar(12)) as hdg
from [AB_DCU_IP_2018].[dbo].[PR_Q_Joined]
) d
pivot(
max([University Issuing Body])
for hdg in ([University Issuing Body_1], [University Issuing Body_2], [University Issuing Body_3])
) pvt
非常感谢你!真不敢相信我犯了多么愚蠢的错误。感谢您的回复:)非常感谢!真不敢相信我犯了多么愚蠢的错误。感谢您的回复:)谢谢!这真的很有帮助,谢谢!这真的很有帮助。