Sql 如何在dyamnmic Pivot中对多个值使用MAX

Sql 如何在dyamnmic Pivot中对多个值使用MAX,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个查询,当我使用静态-动态枢轴时,它工作正常 静态脚本: 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='Emp

我有一个查询,当我使用静态-动态枢轴时,它工作正常

静态脚本

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,'+@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 ('+@cols+') )PVT
GROUP BY  Name, tableName
'

EXEC   (@query)
所以这里的日期值是这样的

([2017-07-10]),([2017-07-09])动态如何应用

MAX([2017-07-10])、MAX([2017-07-09])


如何在Dynamic Pivot中获取每个日期的最大值这里有一种在列列表中获取最大值的方法

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,'+@select_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 ('+@cols+') )PVT
GROUP BY  Name, tableName
'

EXEC   (@query)

注意:当前将行转换为csv的方法不能保证始终有效。我使用了
xml path()
方法来做同样的事情

@mohan111-很高兴它帮助了您;)