2017-01-06 62 views
-1

更多我有兩個表。我寫了一個查詢。日期是動態的。我可以選擇任何日期。 `SQL Server 2008中樞軸多列和動態列

select a.MP,a.CP,a.Frequency,a.Time,CONVERT(varchar(12),b.date,101) as 
EntryDate,b.actualtime from mpcp a, DailyData b 
where a.UserID=1 and a.MpCpId=b.MpCpId and 
CONVERT(varchar(12),b.EntryDate,101) between 
CONVERT(varchar(12),GETDATE()-5,101) and 
CONVERT(varchar(12),GETDATE()+25,101)` 

輸出

enter image description here

但我想輸出像 enter image description here

回答

1

假設我正在存儲在一個臨時表和成像數據的結果,我創建了一個數據,您的要求

試試這個是否有用與否

create table #piv 
(
mp varchar(10), 
cp varchar(10), 
freq varchar(10), 
time int, 
entryd date, 
acuralize int 
) 
insert into #piv values 
('don','asper','da',30,getdate(),0), 
('dwm','donl','da',10,getdate(),3), 
('qar','qpr','da',15,getdate(),5), 
('qar','qpr','da',15,'01-16-17',5), 
('qar','qpr','da',15,'01-15-17',5), 
('qar','qpr','da',15,'01-16-17',5) 

SELECT * FROM #piv 
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(entryd) From #piv Order by 1 For XML Path('')),1,1,'') 
Select @SQL = ' 
Select *,' + @SQL + ' 
From #piv 
Pivot (max(time) For [entryd] in (' + @SQL + ')) p' 
Exec(@SQL); 
+0

謝謝chanukya。這對我有用。 –

+0

是的,我接受了這個答案。 –

+0

接受手段只需要勾選右邊標記,是對答案的左側:).. @ PramodThakur – Chanukya

0

您可以創建一個動態的支點。這個link是一個很好的例子。

祝您好運!

0
DECLARE @cols VARCHAR(max),@sql VARCHAR(max) 
    SELECT @cols=ISNULL(@cols+',[','[')+ CONVERT(VARCHAR,a.EntryDate,101)+']' 
    FROM mpcp a, DailyData b 
    where a.UserID=1 and a.MpCpId=b.MpCpId and DATEDIFF(d,GETDATE(),b.EntryDate) BETWEEN -5 AND 25 
    GROUP BY a.time 

    SET @sql=' 
    SELECT * FROM (

     SELECT a.MP,a.CP,a.Frequency,a.Time,CONVERT(varchar(12),b.date,101) AS EntryDate,b.actualtime 
     FROM mpcp a, DailyData b 
     WHERE a.UserID=1 and a.MpCpId=b.MpCpId and where a.UserID=1 and a.MpCpId=b.MpCpId and DATEDIFF(d,GETDATE(),b.EntryDate) BETWEEN -5 AND 25 
) AS t 
    PIVOT (MAX(actualtime) FOR EntryDate IN ('[email protected]+'))' 
    EXEC(@sql)