我有下面的代码,效果很好,但是我不想每天继续输入日期。
我的日期将始终是过去7天(包括今天)-这意味着该表将每天清除,并且每天都会提取新数据。
select *
from
(
select EMP_ID, EMP_SHORT_NAME, SEG_CODE,
NOM_DATE
from sick_codes_Test$
) src
pivot
(
max(seg_code)
for nom_date in ([2018-07-14], [2018-07-15],[2018-07-16],[2018-07-17],[2018-07-18],
[2018-07-19], [2018-07-20])
) piv
那么对于“ nom_date in”,如何将那些日期设置为表中的日期?
我尝试了以下链接以及以下链接
https://www.mssqltips.com/sqlservertip/2783/script-to-create-dynamic-pivot-queries-in-sql-server/
但是无法使其正常工作
通过遵循上述网址,我想到了这段代码
DECLARE @columns NVARCHAR(MAX), @sql NVARCHAR(MAX);
SET @columns = N'';
SELECT @columns += N',' + QUOTENAME(NOM_DATE)
FROM sick_codes_Test$
SET @sql = N'
SELECT ' + STUFF(@columns, 1, 2, '') + '
FROM
(
SELECT EMP_ID, EMP_SHORT_NAME, SEG_CODE
from sick_codes_Test$
) AS j
PIVOT
(
max(seg_code) FOR nom_date IN ('
+ STUFF(REPLACE(@columns, ', [', ',['), 1, 1, '')
+ ')
) AS p;';
PRINT @sql;
EXEC sp_executesql @sql;
任何帮助将不胜感激。
答案 0 :(得分:0)
在进一步研究之后,我认为我找到了一种可能的解决方案,但是在运行以下代码之后,我看到EMP_ID被复制。
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
--Get distinct values of the PIVOT Column
SELECT @ColumnName= ISNULL(@ColumnName + ',','')
+ QUOTENAME(NOM_DATE)
FROM (SELECT DISTINCT NOM_DATE FROM sick_codes_Test$ ) AS NOM_DATE
order by NOM_DATE ASC
--Prepare the PIVOT query using the dynamic
SET @DynamicPivotQuery =
N'SELECT EMP_ID, EMP_SHORT_NAME, ' + @ColumnName + '
FROM sick_codes_Test$
PIVOT(MAX(SEG_CODE)
FOR NOM_DATE IN (' + @ColumnName + ')) AS PVTTable'
--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery
经过更多修改,我终于找到了可行的解决方案
DECLARE @DynamicPivotQuery AS NVARCHAR(MAX)
DECLARE @ColumnName AS NVARCHAR(MAX)
--Get distinct values of the PIVOT Column
SELECT @ColumnName= ISNULL(@ColumnName + ',','')
+ QUOTENAME(NOM_DATE)
FROM (SELECT DISTINCT NOM_DATE FROM sick_codes_Test$ ) AS NOM_DATE
order by NOM_DATE ASC
--Prepare the PIVOT query using the dynamic
SET @DynamicPivotQuery =
N'SELECT EMP_ID, EMP_SHORT_NAME, ' + @ColumnName + '
FROM (
SELECT DISTINCT EMP_ID,
EMP_SHORT_NAME,
SEG_CODE,
NOM_DATE
FROM sick_codes_Test$
)t
PIVOT(MAX(SEG_CODE)
FOR NOM_DATE IN (' + @ColumnName + ')) AS PVTTable'
--Execute the Dynamic Pivot Query
EXEC sp_executesql @DynamicPivotQuery