Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Cursor..Ques列数据作为列名称和resp下的相关应答数据。Ques栏_Sql_Sql Server_Sql Server 2008_Pivot - Fatal编程技术网

Sql Cursor..Ques列数据作为列名称和resp下的相关应答数据。Ques栏

Sql Cursor..Ques列数据作为列名称和resp下的相关应答数据。Ques栏,sql,sql-server,sql-server-2008,pivot,Sql,Sql Server,Sql Server 2008,Pivot,我有一张桌子,看起来像 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 A

我有一张桌子,看起来像

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行(每个账号1行)而不是4行。

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

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

如果不知道要转换的列数,则可以使用动态轴:

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)

或者您可以将聚合与
案例一起使用

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