У меня есть следующий фрагмент кода, который дает мне текущие результаты ниже. Я пытаюсь добавить дополнительный столбец для каждого из моих поворотных значений, чтобы включить данные lastview для каждого из моих списков siteuserid / tagname (см. ожидаемые результаты ). Поскольку этот столбец не является агрегацией, я не верю, что дополнительный свод поможет. Я пробовал несколько способов добавления lastview , но это всегда приводит к дополнительным строкам, а не к желаемому выводу.
create table #taghits (userid int, email varchar(20), tagname varchar(20), hits int, lastview date)
insert into #taghits select 1, 'email1@here.com', 'tag1', 3, '2020-03-24';
insert into #taghits select 2, 'email2@here.com', 'tag1', 1, '2020-03-17';
insert into #taghits select 2, 'email2@here.com', 'tag2', 1, '2020-03-18';
insert into #taghits select 3, 'email3@here.com', 'tag1', 2, '2020-03-25';
insert into #taghits select 3, 'email3@here.com', 'tag2', 5, '2020-03-28';
select * from #taghits;
DECLARE @Columns3 as NVARCHAR(MAX)
SELECT @Columns3 = ISNULL(@Columns3 + ', ','') + QUOTENAME(TagName)
FROM (
select distinct TagName
from #taghits
) AS TagNames
ORDER BY TagNames.TagName
DECLARE @scolumns as NVARCHAR(MAX)
SELECT @scolumns = ISNULL(@Scolumns + ', ','')+ 'ISNULL(' + QUOTENAME(TagName) + ', 0) AS '+ QUOTENAME(TagName)
FROM (select distinct TagName
from #taghits) AS TagNames
ORDER BY TagNames.TagName
DECLARE @SQL as NVARCHAR(MAX)
SET @SQL = '
select userid, email, ' + @scolumns + '
from
(
select userid, email, tagname, hits
from #taghits
) as TagHits
PIVOT (
SUM(hits)
FOR TagName IN (' + @Columns3 + ')
) AS PivotTable
order by userId
'
exec sp_executesql @SQL;
Текущий результат
| userid | email | tag1 | tag2 |
|--------|-----------------|------|------|
| 1 | email1@here.com | 3 | 0 |
| 2 | email2@here.com | 1 | 1 |
| 3 | email3@here.com | 2 | 5 |
Желаемый Результат
| userid | email | tag1_hits | tag1_lastview | tag2_hits | tag2_lastview |
|--------|-----------------|-----------|---------------|-----------|---------------|
| 1 | email1@here.com | 3 | 2020-03-24 | 0 | null |
| 2 | email2@here.com | 1 | 2020-03-17 | 1 | 2020-03-18 |
| 3 | email3@here.com | 2 | 2020-03-25 | 5 | 2020-03-28 |