您好,谢谢!我有以下查询检索我需要的表(以绿色突出显示)。最上面的select语句获取min(eventdate),最下面的select语句(并集)获取min(eventdate)和max(eventdate)的串联。这是最重要的维护。这样就可以正常返回数据,但是现在我不得不将其余数据联接到该表中(以红色突出显示)。
我如何加入而不必将所有列分组并丢失一些数据。如果您查看图像,则可以看到返回的数据,因为不需要对事件时间进行分组,它们都是一样的。但是,情况并非总是如此,即使相同的ID,事件时间也会改变。任何帮助,将不胜感激。
(Select id,__DisplayName, LEFT(cast(min(EventDate) as varchar), len(min(eventdate)) -7)Eventdate from SP_HS_Marketing_ExtEvents WHERE __ApprovalStatus = 'Approved' and __EventType not in ('1','-1','-2')
group by ID, __DisplayName
Union ALL
Select id,__DisplayName,
LEFT(cast(min(EventDate) as varchar), len(min(eventdate)) -7) + ' - ' + LEFT(cast(max(EventDate) as varchar), len(max(eventdate)) -7) Eventdate from SP_HS_Marketing_ExtEvents WHERE __ApprovalStatus = 'Approved' and __EventType = -2
group by ID, __DisplayName)
答案 0 :(得分:0)
要实现此目的,您可以使用CTE查找最小和最大日期,然后再联接回原始表并concat +强制转换日期。
With cte as (
Select min(eventdate) as minDate, max(eventdate) as maxDate, Id
from SP_HS_Marketing_ExtEvents
WHERE __ApprovalStatus = 'Approved' and __EventType not in ('1','-1','-2')
group by id
)
Select Distinct s.EventTitle,
DATENAME(MONTH,cte.minDate) + ' ' + DATENAME(DAY,cte.minDate) + ' ' + RIGHT('00' + CAST(YEAR(cte.minDate) AS VARCHAR),2)
+ ' - ' +
DATENAME(MONTH,cte.maxDate) + ' ' + DATENAME(DAY,cte.maxDate) + ' ' + RIGHT('00' + CAST(YEAR(cte.maxDate) AS VARCHAR),2) AS EventDate
,EventTime
,Location
from SP_HS_Marketing_ExtEvents as s
join cte as cte
on cte.ID = s.id