2017-07-10 7 views
0

dyamnmicピボットで複数の値のためにMAXを使用する方法:私は、静的、動的ピボットそれは罰金</p> <p><strong>静的スクリプト</strong>働いているを使用していたとき、私は、クエリを持って

Select Name, tableName,MAX([2017-07-10])[2017-07-10],MAX([2017-07-09])[2017-07-09] 
     from (
SELECT  Target_Db_Name, 
      Target_Tbl_Name, 
      Cnt 
    FROM Table1 l 

      WHERE Name='Employee' AND 
        dt >= CAST(dateadd(day, -1, getdate()) as date))T 
PIVOT (MAX(cnt)FOR dt IN ([2017-07-10],[2017-07-09]))PVT 
GROUP BY Name, tableName 

私がしようとしています私は複数のカンマで区切られたデータの最大値を得るために混乱している同じクエリで動的なクエリを実装することは値

動的スクリプト

DECLARE @cols AS NVARCHAR(MAX)=''; 
DECLARE @query AS NVARCHAR(MAX)=''; 

SELECT @cols = @cols + QUOTENAME(dt) + ',' FROM (select distinct CONVERT(DATE,t)Start_dt from Events 
WHERE Start_dt >= CAST(dateadd(day, -1, getdate()) as date)) as tmp ORDER BY Start_dt desc 
select @cols = substring(@cols, 0, len(@cols)) 


Select @query = ' 

Select Name, tableName,'[email protected]+' 
     from (
SELECT  Name, 
      tableName, 
      Cnt 
    FROM Table1 l 

      WHERE Name=''Employee'' AND 
        Start_dt >= CAST(dateadd(day, -1, getdate()) as date))T 
PIVOT (MAX(Cnt)FOR Start_dt IN ('[email protected]+'))PVT 
GROUP BY Name, tableName 
' 

EXEC (@query) 

ので、ここでの日付の値が

MAXを適用する方法この

(【2017年7月10日])([2017年7月9日])ダイナミックのように来ています([2017年7月10日])、MAX([2017年7月9日])

ここ

答えて

0

Max AGGRを得るための一つの方法である動的なピボットで日付ごとの最大を取得する方法列リストにegate

SET @cols = stuff((SELECT DISTINCT ','+Quotename(CONVERT(DATE, Start_dt)) 
      FROM Events 
      WHERE Start_dt >= Cast(Dateadd(day, -1, Getdate()) AS DATE) 
      ORDER BY Start_dt DESC 
      FOR xml path('')) ,1,1,'') 
--Print @cols 

SET @select_cols = stuff((SELECT DISTINCT ',Max('+Quotename(CONVERT(DATE, Start_dt))+') as '+Quotename(CONVERT(DATE, t)) 
      FROM Events 
      WHERE Start_dt >= Cast(Dateadd(day, -1, Getdate()) AS DATE) 
      ORDER BY Start_dt DESC 
      FOR xml path('')) ,1,1,'') 
--Print @select_cols 

Select @query = ' 

Select Name, tableName,'[email protected]_cols+' 
     from (
SELECT  Name, 
      tableName, 
      Cnt 
    FROM Table1 l 

      WHERE Name=''Employee'' AND 
        Start_dt >= CAST(dateadd(day, -1, getdate()) as date))T 
PIVOT (MAX(Cnt)FOR Start_dt IN ('[email protected]+'))PVT 
GROUP BY Name, tableName 
' 

EXEC (@query) 

注: CSVさんに行を変換するためにあなたの現在の方法は、すべての時間を動作することが保証されていません。私はxml path()のために同じを行う方法を使用した

+1

あなたはユニークです – mohan111

+0

@ mohan111 - 喜んでそれはあなたを助けた;) –

関連する問題

 関連する問題