Нет необходимости использовать PIVOT
для этого, иногда это скорее беспорядок, чем стоит.Если вы не используете агрегатные функции - подумайте об этом, вы хотите сгруппировать записи по SystemName
и SystemDescription
, у вас нет выбора, кроме как использовать агрегаты.Это нормально, просто используйте MAX
, как я сделал, вы получите желаемый результат.Единственное, о чем вам следует беспокоиться, это сценарий, в котором есть две записи с одинаковыми SystemName
, SystemDescription
и CertificationType
, которые имеют разные значения для CertName
или CertDate
- в этом случае вам понадобятся некоторыеспособ выбрать, какие атрибуты выбраны для группы.
Вот пример без Pivot:
SELECT SystemName,
SystemDescription,
MAX([x-Name]) AS [x-Name],
MAX([x-Date]) AS [x-Date],
MAX([y-Name]) AS [y-Name],
MAX([y-Date]) AS [y-Date],
MAX([z-Name]) AS [z-Name],
MAX([z-Date]) AS [z-Date]
FROM (
SELECT SystemName,
SystemDescription,
CASE CertificationType WHEN 'X' THEN CertName END AS [x-Name],
CASE CertificationType WHEN 'Y' THEN CertName END AS [y-Name],
CASE CertificationType WHEN 'Z' THEN CertName END AS [z-Name],
CASE CertificationType WHEN 'X' THEN CertDate END AS [x-Date],
CASE CertificationType WHEN 'Y' THEN CertDate END AS [y-Date],
CASE CertificationType WHEN 'Z' THEN CertDate END AS [z-Date]
FROM @yourTable
) T
GROUP BY SystemName, SystemDescription;