2016-07-12 2 views
1

두 개의 테이블 MasterTableTest8 및 HistoricDatatest8이 있습니다.날짜를 기준으로 PIVOT을 사용하여 보고서를 생성하는 방법

create table MasterTableTest8 
(ID int primary key, Name varchar(10)) 

insert into MasterTableTest8 values (1,'ATS') 
insert into MasterTableTest8 values (2,'BTS') 
CREATE TABLE HistoricDatatest8 
(
ID int FOREIGN KEY REFERENCES MasterTableTest8(ID), 
Name varchar(100), 
ShortName varchar(10), 
Reason varchar(10), 
Importance varchar(10), 
Noofissues int, 
inserteddate datetime 
) 
insert into HistoricDatatest8 values (1,'ATS','S', 'Other','High',26,getdate()-7) 
insert into HistoricDatatest8 values (1,'ATS','S', 'Other','High',8,getdate()+7) 
insert into HistoricDatatest8 values (1,'ATS','S', 'Other','High',80,getdate()) 

insert into HistoricDatatest8 values (2,'BTS','S1', 'Other','LOW',26,getdate()-7) 
insert into HistoricDatatest8 values (2,'BTS','S1', 'Other','LOW',8,getdate()+7) 
insert into HistoricDatatest8 values (2,'BTS','S1', 'Other','LOW',80,getdate()) 

--Created는 두 개의 테이블을 삽입했다.

select 
N.ID, 
N.Name, 
ShortName, 
Reason, 
Importance, 
Noofissues, 
inserteddate 
INTO #TABLE 
FROM HistoricDatatest8 N 
JOIN MasterTableTest S ON N.ID=S.ID 

해시 테이블에 필요한 데이터를 --Inserting.

--drop table #table 

    DECLARE @cols NVARCHAR (MAX) 
SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [inserteddate], 106) + ']', 
      '[' + CONVERT(NVARCHAR, [inserteddate], 106) + ']') 
      FROM (SELECT DISTINCT [inserteddate] FROM #TABLE) PV 
      ORDER BY [inserteddate] 

      DECLARE @query NVARCHAR(MAX) 
SET @query = '   
      SELECT * FROM 
     ( 
      SELECT * FROM #TABLE 
     ) x 
     PIVOT 
     (
      count(Noofissues) 
      FOR [inserteddate] IN (' + @cols + ') 
     ) p' 
     EXEC SP_EXECUTESQL @query 

현재 결과

current results image

예상 결과 :

expected results image

+0

SQL 구문에 여러 가지 오류가 있습니다. 수정하십시오. 또한 질문에 대한 실제 결과 및 예상 결과를 추가하십시오. –

+0

@Chris Pickford, 방금 변경 사항을 완료하고 문제가 날짜 관련 하나 인 것 같습니다. 제발 도와주세요. –

답변

0

많은 사람들이 R & D를 얻은 후에 다른 사람들에게 유용 할 수 있습니다. 어떤 최적화 된 답변을 주시면 감사하겠습니다.

선택 * ID 의해 HistoricDatatest80 순서에서 선택 N.ID, N.Name가 축약이 이유 중요성 noOfIssues 개는 N HistoricDatatest80 FROM #TABLE INTO inserteddate가 N.ID S.ID = ON MasterTableTest80 S 가입

--drop table #table 

    DECLARE @cols NVARCHAR (MAX) 
SELECT @cols = COALESCE (@cols +',','')+ '['+DATEValue+']' 
      FROM (SELECT DISTINCT (CONVERT(NVARCHAR, [inserteddate], 106)) AS DATEValue FROM HistoricDatatest80) PV 
      ORDER BY DATEValue 
      print @cols 
      DECLARE @query NVARCHAR(MAX) 
SET @query = '   
      SELECT * FROM 
     ( 
      SELECT ShortName,Reason,Importance,Noofissues,(CONVERT(NVARCHAR, [inserteddate], 106)) AS DATEValue FROM #TABLE 
     ) x 
     PIVOT 
     (
      sum(Noofissues) 
      FOR [DATEValue] IN (' + @cols + ') 

     ) p'  
     EXEC SP_EXECUTESQL @query 


    drop table #table 
0

예상되는 결과는 무엇입니까? 현재 디스플레이에는 현재의 예상 결과와 동일한 결과가 표시됩니다.

예상 하시겠습니까? 날짜 | 이름 | ShortName | 이유 | 중요성 | 문제의 수 | 05-7 월 16 일 | ATS | S | 기타 | 하이 | 26 12-7 월 16 일 | BTS | S1 | 기타 | LOW | 80

+0

현재 5 월 7 일, 12 월 7 일 및 7 월 19 일 모두 0으로 표시됩니다 (0) –

+0

그리고 같은 날짜에 대해 테이블에 행을 하나 더 추가하면 컴파일 오류가 발생합니다 ('12 Jul 2016 '열이 여러 번 지정되었습니다. ('A', 'S', '기타', 'Meduim', 80, getdate())에 값을 삽입합니다. –

관련 문제