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-很高兴它帮助了您;)