Я пытаюсь повернуть данные в SQL, и у поворотных столбцов есть разные значения.
Мне удалось получить правильные столбцы и почти все данные правильные, но не поворотные столбцы значение.
Вот мой T- SQL:
DECLARE @areaID INT
SET @areaID = 44473
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(title)
FROM agreements AS c
WHERE (c.orgID = 1893 OR (c.OrganisationId = (SELECT sc.customerOrganisationID FROM companyConfig AS sc WHERE sc.orgID = 1893) AND (c.typeID is null OR c.typeID = -1 OR c.typeID = (SELECT sc.TypeID FROM companyConfig AS sc WHERE sc.orgID = 1893))))
AND c.id IN(SELECT uc.agreementID from Useragreements AS uc INNER JOIN users AS u ON uc.employeeID = u.userNumber INNER JOIN participants AS sp ON u.userID = sp.userID WHERE orgID = 1893)
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query = 'SELECT identity, name, ' + @cols + ' FROM
(
SELECT identity, name, title, CASE WHEN COUNT(Approved) = (SELECT COUNT(psl.parentID) FROM relationLinking AS psl WHERE psl.userID = userID) THEN 2 ELSE 0 END AS approved
FROM(
SELECT u1.identity, u1.userName AS name, c.title, uc.approved, row_number() over(partition by u1.userID, uc.agreementID, uc.parentID ORDER BY uc.date DESC, u1.userID) AS rn
FROM users AS u1 INNER JOIN areaParticipant AS clp ON u1.userID = clp.userID LEFT JOIN userAgreements AS uc ON u1.userNumber = uc.employeeID FULL OUTER JOIN agreements AS c ON uc.agreementID = c.id
WHERE clp.classTeacher = 0
AND clp.classID = ' + CAST(@areaID AS VARCHAR(56)) + '
) AS tab
WHERE rn = 1
GROUP BY identity, name, title
) AS tab1
PIVOT
(
COUNT(approved)
for title in (' + @cols + ')
) p '
execute(@query)
Этот запрос выполняется и получает такой результат:
Identity Name Col1 Col2 Col3
1 Luke 1 0 1
2 Dart 0 0 1
3 Yoda 1 1 1
1 и нули - это неверные данные. У меня есть случай, когда я хочу указать число в поворотных столбцах. В текущем предложении CASE у меня есть 2 и 0, поэтому я не могу определить, откуда берется 1.
Я хочу добиться того, чтобы я мог манипулировать данными поворотных столбцов с помощью вложенных предложений case, но я могу ' t даже заставить работать первое предложение case.
В конце я хочу, чтобы данные выглядели следующим образом.
Identity Name Col1 Col2 Col3
1 Luke 2 0 1
2 Dart 0 0 3
3 Yoda 1 4 1
Где данные в поворотных столбцах может варьироваться от 0 до 4 Мы используем SQL Сервер 2016