Transpose a set of rows as columns in SQL Server 2000

后端 未结 5 1977
无人及你
无人及你 2020-12-17 23:13

Is there any facility of transposing rows to columns in SQL Server (it is possible in MS-Access)? I was befuddled because this facility is available in MS-Access but not in

5条回答
  •  抹茶落季
    2020-12-17 23:46

    I have Data in following format

    Survey_question_ID

    Email (User)

    Answer

    for 1 survey there are 13 question and answers the desired output i wanted was

    User ---Survey_question_ID1---Survey_question_ID2

    email---answers---answer ........so on

    Here is the solution for SQL Server 2000, Cause field data type is TEXT.

    DROP TABLE #tmp
    
    DECLARE @tmpTable  TABLE
    (
    emailno NUMERIC,
    question1 VARCHAR(80),
    question2 VARCHAR(80),
    question3 VARCHAR(80),
    question4 VARCHAR(80),
    question5 VARCHAR(80),
    question6 VARCHAR(80),
    question7 VARCHAR(80),
    question8 VARCHAR(80),
    question9 VARCHAR(80),
    question10 VARCHAR(80),
    question11 VARCHAR(80),
    question12 VARCHAR(80),
    question13 VARCHAR(8000)
    )
    
    DECLARE @tmpTable2  TABLE
    (
    emailNumber NUMERIC
    )
    
    DECLARE @counter INT
    DECLARE @Email INT
    
    SELECT @counter =COUNT(DISTINCT ans.email) FROM answers ans WHERE ans.surveyname=100430 AND ans.qnpkey BETWEEN 233702 AND 233714
    SELECT * INTO #tmp FROM @tmpTable
    INSERT INTO @tmpTable2 (emailNumber) SELECT DISTINCT CAST(ans.email AS NUMERIC) FROM answers ans WHERE ans.surveyname=100430 AND ans.qnpkey BETWEEN 233702 AND 233714
    
    WHILE @counter >0
    
    BEGIN
    
            SELECT TOP 1 @Email= emailNumber FROM @tmpTable2
            INSERT INTO @tmpTable (emailno) VALUES (@Email )
    
    
            Update @tmpTable set question1=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233702 and ans.email=@Email
            Update @tmpTable set question2=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233703 and email=@email
            Update @tmpTable set question3=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233704 and email=@email
            Update @tmpTable set question4=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233705 and email=@email
            Update @tmpTable set question5=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233706 and email=@email
            Update @tmpTable set question6=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233707 and email=@email
            Update @tmpTable set question7=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233708 and email=@email
            Update @tmpTable set question8=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233709 and email=@email
            Update @tmpTable set question9=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233710 and email=@email
            Update @tmpTable set question10=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233711 and email=@email
            Update @tmpTable set question11=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233712 and email=@email
            Update @tmpTable set question12=CAST(answer as VARCHAR(80)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233713 and email=@email
            Update @tmpTable set question13=CAST(answer as VARCHAR(8000)) from answers ans where ans.surveyname=100430 and ans.qnpkey = 233714 and email=@email
    
            insert into #tmp select * from  @tmpTable       
    
            DELETE FROM @tmpTable       
            DELETE FROM @tmpTable2 WHERE emailNumber= @Email
    
            set @counter =@counter -1
    
    End
    
    select * from #tmp
    

提交回复
热议问题