, так что я пытаюсь придумать лист с зарплатой, и вот что я получил:
SELECT * FROM
(
SELECT
CAST(ad.EmplName AS NVARCHAR(MAX)) AS [EmplName],
CONVERT(VARCHAR(30), CAST(ad.TicketDate AS DATE), 1) AS [TicketDate],
ROUND(ad.TotActTime, 2) AS [TotalHrs]
FROM AttendDet ad
WHERE ad.EmplCode IS NOT NULL
AND ad.AttendCode <> '9999'
AND CONVERT(DATE, ad.TicketDate) BETWEEN '20181022' AND '20181027'
) AS BaseData
PIVOT
(
SUM(BaseData.TotalHrs)
FOR BaseData.TicketDate
IN
(
[10/22/18],[10/23/18],[10/24/18],[10/25/18],[10/26/18],[10/27/18], [10/28/18]
)
) AS PivotTable
Теперь, когда запрос работает, как и ожидалось, результаты выглядят следующим образом:
![enter image description here](https://i.stack.imgur.com/KbPVV.jpg)
Проблема в том, что нужно вводить даты внутри IN в PIVOT. Каков наилучший способ сделать это автоматически со списком из запроса?
Если у меня есть список дат и, скажем, я всегда хотел посмотреть на предыдущую неделю, то приведенный ниже код может сгенерировать это:
SELECT
CONVERT(VARCHAR(30), CAST(DATEADD(dd,((DATEDIFF(dd,'17530101',GETDATE())/7)*7)-7,'17530101') AS DATE), 1)
UNION
SELECT
CONVERT(VARCHAR(30), CAST(DATEADD(dd,((DATEDIFF(dd,'17530101',GETDATE())/7)*7)-6,'17530101') AS DATE), 1)
UNION
SELECT
CONVERT(VARCHAR(30), CAST(DATEADD(dd,((DATEDIFF(dd,'17530101',GETDATE())/7)*7)-5,'17530101') AS DATE), 1)
UNION
SELECT
CONVERT(VARCHAR(30), CAST(DATEADD(dd,((DATEDIFF(dd,'17530101',GETDATE())/7)*7)-4,'17530101') AS DATE), 1)
UNION
SELECT
CONVERT(VARCHAR(30), CAST(DATEADD(dd,((DATEDIFF(dd,'17530101',GETDATE())/7)*7)-3,'17530101') AS DATE), 1)
UNION
SELECT
CONVERT(VARCHAR(30), CAST(DATEADD(dd,((DATEDIFF(dd,'17530101',GETDATE())/7)*7)-2,'17530101') AS DATE), 1)
UNION
SELECT
CONVERT(VARCHAR(30), CAST(DATEADD(dd,((DATEDIFF(dd,'17530101',GETDATE())/7)*7)-1,'17530101') AS DATE), 1)
Проблема в том, что я понятия не имею, как включить это в мой IN. Я посмотрел некоторые вопросы, касающиеся работы с помощью динамического SQL, но, честно говоря, я понятия не имею, что это вообще такое, и мне трудно пытаться применить эти примеры в моем случае. Есть ли другой способ сделать это? Любая помощь приветствуется, спасибо заранее