gpt4 book ai didi

sql - Cursor ..Ques column Data as Column names and resp. 下的相关答案数据。问题专栏

转载 作者:行者123 更新时间:2023-12-04 13:53:39 24 4
gpt4 key购买 nike

我有一张 table 看起来像

AccNo   Person  Ques    Anwers
1 XXX Q1 A1
1 XXX Q2 A2
1 XXX Q3 A3
1 XXX Q4 A4

我需要写一段代码让我的输出看起来像这样..

AccNo      Person    Q1    Q2    Q3    Q4
1 XXX Ans1 Ans2 Ans3 Ans4

我已经写了一个游标,但我的输出看起来像下面这样

AccNo       Person    Q1    Q2    Q3    Q4
1 XXX Ans1
1 XXX Ans2
1 XXX Ans3
1 XXX Ans4

请让我知道我应该怎么做才能将数据放入 1 行(每个 AccNo 1 行)而不是 4 行。

最佳答案

你不需要游标,你可以使用PIVOT。如果您知道要转换的行数,您可以通过静态数据透视表对其进行硬编码:

select *
from
(
select accNo, person, ques, anwers
from yourtable
) x
pivot
(
min(anwers)
for ques in([Q1], [Q2], [Q3], [Q4])
) p

参见 SQL Fiddle with Demo

如果您不知道要转换的列数,则可以使用动态数据透视表:

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

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(ques)
from yourtable
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')

set @query = 'SELECT accno, person,' + @cols + ' from
(
select accNo, person, ques, anwers
from yourtable
) x
pivot
(
min(anwers)
for ques in (' + @cols + ')
) p '

execute(@query)

参见 SQL Fiddle with Demo

或者您可以使用带有CASE 的聚合:

select accno, person,
max(case when ques = 'Q1' then anwers end) Q1,
max(case when ques = 'Q2' then anwers end) Q2,
max(case when ques = 'Q3' then anwers end) Q3,
max(case when ques = 'Q4' then anwers end) Q4
from yourtable
group by accno, person

参见 SQL Fiddle with Demo

关于sql - Cursor ..Ques column Data as Column names and resp. 下的相关答案数据。问题专栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12503052/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com