将日期名称添加到数据透视SQL中的日期列



我想在日期"01.08.2022,02.08.2022等"之前添加一个日期名称我的桌子是这样的:

2022年8月1日2022年4月4日----------------------------------------
名字 姓氏2022年2月2日2022年3月3日
名称
名称 名称 -------- ---------------
名称 名称 -------- ---------------

您只需为列名添加一个别名。如果使用MAX(CASE WHEN进行手动透视,则更容易做到这一点,因为这样您只需要一个@columns变量,而使用PIVOT则需要按实际值和别名将其拆分。

您正在使用SQL Server 2019,因此可以使用更新的STRING_AGG,这要容易得多。

DECLARE 
@columns NVARCHAR(MAX), 
@sql     NVARCHAR(MAX);
SELECT @columns = STRING_AGG(
CONCAT(
'  MAX(CASE WHEN Datum = ',
QUOTENAME(CONVERT(varchar(20), Datum, 112), ''''),
' THEN Bezeichnung END) AS ',
QUOTENAME(LEFT(DATENAME(weekday, Datum), 3) + ' ' + CONVERT(varchar(20), Datum, 112))
)
, ',
' ) WITHIN GROUP (ORDER BY Datum)
FROM (
SELECT DISTINCT Datum
FROM  TABLE1
Where Datum > DATEADD(day, -1, GETDATE())
and Datum < DATEADD(day, +13, GETDATE())
) sub;
SET @sql ='
SELECT
t.Vorname,
t.Nachname, 
' + @columns + '
FROM   
(
select DISTINCT Vorname, Nachname, Bezeichnung, Datum
from TABLE1 a
left join TABLE2 b ON a.Mitarbeiter_ID = b.Mitarbeiter_ID
WHERE a.Bezeichnung is not null
and a.Bezeichnung <> ''''
and Datum > DATEADD(day, -1, GETDATE())
and Datum < DATEADD(day, +13, GETDATE())
) t
GROUP BY
t.Vorname,
t.Nachname;
';
EXECUTE sp_executesql @sql;

最新更新