2017-06-27 20 views
0

私はこのタイプのデータを持っています。 NEED DATASQL Serverのピボット合計データ

私はSQL Serverをどのように使用できますか。

+2

データとコードを、(リンク先の)イメージではなく、書式付きテキストとして表示してください。何か試しましたか? – HoneyBadger

+0

はい。私はピボットを試していますが、正しいデータではありません。 –

+0

@KETULSONI - これまでに試したコードを投稿してください –

答えて

0

これは使用できます。

DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX); 
SET @columns = N''; 
SELECT @columns += N', ' + QUOTENAME(Process) 
    FROM 
    (
    SELECT DISTINCT Process FROM SAMPLE_TABLE 
) AS x; 
SET @sql = N'SELECT [Date],' 
+ STUFF(@columns, 1, 2, '') 
+ 'FROM 
(

SELECT [Date], Qty,Process FROM SAMPLE_TABLE 

) AS j PIVOT 
(
    SUM(Qty) FOR Process IN (' 
    + STUFF(REPLACE(@columns, ', [', ',['), 1, 1, '') 
    + ') 
) AS p ORDER BY p.[Date];'; 
EXEC sp_executesql @sql; 
0

それは常にこれらの4つのオプションだ場合...条件付き集計

select Date, 
    sum(case when Process = 'DESIGN' then Qty else 0 end) as DESIGN, 
    sum(case when Process = 'CODING' then Qty else 0 end) as CODING, 
    sum(case when Process = 'TESTING' then Qty else 0 end) as TESTING, 
    sum(case when Process = 'DATABASE' then Qty else 0 end) as [DATABASE] 
from MyTable 
group by Date 
0

を使用して私たちは、動的SQLに

IF OBJECT_ID('Tempdb..#Temp') IS NOt NUll 
Drop Table #Temp 
;With cte (Developer, Process ,Qty, Date) 
AS 
(
SELECT 'XYZ','Design', 10  ,'26/06/2017' Union all 
SELECT 'XYZ','Codein', 20 ,'26/06/2017' Union all 
SELECT 'XYZ','Testin', 30 ,'26/06/2017' Union all 
SELECT 'XYZ','Databa', 40 ,'26/06/2017' Union all 
SELECT 'ABC','Design', 10  ,'26/06/2017' Union all 
SELECT 'ABC','Codein', 20 ,'26/06/2017' Union all 
SELECT 'ABC','Testin', 30 ,'26/06/2017' Union all 
SELECT 'ABC','Databa', 40 ,'27/06/2017' Union all 
SELECT 'XYZ','Design', 50  ,'27/06/2017' Union all 
SELECT 'XYZ','Codein', 60 ,'27/06/2017' Union all 
SELECT 'XYZ','Testin', 70 ,'27/06/2017' Union all 
SELECT 'XYZ','Databa', 80 ,'27/06/2017' Union all 
SELECT 'ABC','Design', 50  ,'27/06/2017' Union all  
SELECT 'ABC','Codein', 60 ,'27/06/2017' Union all 
SELECT 'ABC','Testin', 70 ,'27/06/2017' Union all 
SELECT 'ABC','Databa', 80 ,'27/06/2017' 
) 
SELECT * INTO #Temp FROM cte 

--Above i have created sample data for getting result 

DECLARE @dynamicCol nvarchar(max), 
     @Sql nvarchar(max), 
     @dynamicCol2 nvarchar(max), 
     @dynamicCol3 nvarchar(max) 

SELECT @dynamicCol=STUFF((SELECT DISTINCT ', ' + 'ISNULL('+Process +',''0'') AS '+ Process FROM #Temp 
FOR XML PATH('')),1,1,'') 

SELECT @dynamicCol2=STUFF((SELECT DISTINCT ', ' + Process FROM #Temp 
FOR XML PATH('')),1,1,'') 

SELECT @dynamicCol3=STUFF((SELECT DISTINCT ', ' + 'SUM('+Process +') OVER(Partition by [Date]) AS '+ Process FROM #Temp 
FOR XML PATH('')),1,1,'') 



SET @Sql='SELECT DISTINCT [Date],'[email protected]+' FROM 
      (
      SELECT [Date] , '+ @dynamicCol +' From 
      (
      SELECT * From 
      #temp 
      )AS Src 
      PIVOT 
      (
      MAX([Qty]) For [Process ] IN ('[email protected]+') 
      ) 
      AS Pvt 
      )DT 
      ' 

PRINT @Sql 

EXEC(@Sql) 
0

を使用することによって、所望の結果を得ることができるピボットを気にしないでください特定のピボットと結果ビューを言及したくないが、以下のデータよりもデータが必要な場合

select Date1,cast(Process as varchar(200)) Status,sum(Qty) as Count from #temp group by Date1,Process 
関連する問題