我想在日期"01.08.2022,02.08.2022等"之前添加一个日期名称我的桌子是这样的:
名字 | 姓氏 | 2022年8月1日2022年2月2日 | 2022年3月3日 | 2022年4月4日||
---|---|---|---|---|---|
名称 | ---------------- | ||||
名称 | 名称 | -------- | --------------- | ------------||
名称 | 名称 | -------- | --------------- | ------------
您只需为列名添加一个别名。如果使用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;