sql >> データベース >  >> RDS >> Sqlserver

PIVOT クエリの複数結合

                DECLARE
                @columns NVARCHAR(MAX) = '',
                @columnsname NVARCHAR(MAX) = '',
                @columnsnameA NVARCHAR(MAX) = '',
    
                @columnsB NVARCHAR(MAX) = '',
                @columnsnameB NVARCHAR(MAX) = '',
    
                @sql     NVARCHAR(MAX) = '';
    
                 -- select the question num
                 SET @columns = STUFF((SELECT distinct ',' + QUOTENAME(cast(Question_no as varchar)) 
                            FROM submission1_details  WHERE Submission1_id=100
    
                            FOR XML PATH(''), TYPE
                            ).value('.', 'NVARCHAR(MAX)') 
                        ,1,1,'')
    
                SET @columnsname = STUFF((SELECT distinct ',' + QUOTENAME(cast(Question_no as varchar)) + ' sub1_Q'+ cast(Question_no as varchar)
                            FROM submission1_details  WHERE Submission1_id=100
    
                            FOR XML PATH(''), TYPE
                            ).value('.', 'NVARCHAR(MAX)') 
                        ,1,1,'')
    
                        SET @columnsnameA = STUFF((SELECT distinct ','+' sub1_Q'+ cast(Question_no as varchar)
                            FROM submission1_details  WHERE Submission1_id=100
    
                            FOR XML PATH(''), TYPE
                            ).value('.', 'NVARCHAR(MAX)') 
                        ,1,1,'')
    
                        SET @columnsB = STUFF((SELECT distinct ',' + QUOTENAME(cast(Question_no as varchar)) 
                            FROM submission2_details  WHERE Submission2_id=500
    
                            FOR XML PATH(''), TYPE
                            ).value('.', 'NVARCHAR(MAX)') 
                        ,1,1,'')
    
                SET @columnsnameB = STUFF((SELECT distinct ',' + QUOTENAME(cast(Question_no as varchar)) + ' sub2_Q'+ cast(Question_no as varchar)
                            FROM submission2_details  WHERE Submission2_id=500
    
                            FOR XML PATH(''), TYPE
                            ).value('.', 'NVARCHAR(MAX)') 
                        ,1,1,'')
    
    
    
    
                print @columns
    
    
                 SET @sql ='
                  select Submission1_id,Submission2_id,Name ,'+ @columnsnameA+ ','[email protected] +' from (
                 select Submission1_id,Submission2_id,Name ,'[email protected]+',Question_no, Answer from (
                 select distinct t1.Submission1_id,t1.Submission2_id,Name,t2.Question_no t,t2.Answer A,t3.Question_no,t3.Answer from submission1_header t1 
                 inner JOIN submission1_details t2 ON  t1.Submission1_id=  t2.Submission1_id
                  inner JOIN submission2_details t3 ON  t1.Submission2_id=  t3.Submission2_id  
    
                 WHERE t1.Submission1_id=100
                 ) as a
                 PIVOT(
                MAX(A)
                for t  IN ('+ @columns +')
                ) AS pivot_table
                ) as b
                PIVOT(
                MAX(Answer)
                for Question_no  IN ('+ @columnsB +')
                ) AS pivot_table1;';
                print @sql
    
                -- execute the dynamic SQL
                EXECUTE sp_executesql @sql;
      


    1. 2つのテーブル間の1対多の関係に対するOracleSELECTQUERY

    2. T-SQL:大文字と小文字を区別する一意のキーを作成するにはどうすればよいですか?

    3. JavaアニメーションGIFとMySQL接続

    4. 無効なパラメータ番号:パラメータが定義されていませんデータの挿入