У меня есть следующие данные в запросе, который требует дальнейшей работы
Id User Application CompanyId ApplicationId Restricted
----------- ----------------------- --------------------- ----------------- ------------- -----------
1 yes@way.com members 4027 1 0
2 dg@spw.com members 1104 1 0
3 dg@spw.com reports 1104 2 0
4 dg@spw.com identity 1104 3 0
5 dg@spw.com landing page 1104 4 0
6 dg@spw.com authorization 1104 7 0
7 jtize@sssssss.com members 1104 1 0
8 jtize@sssssss.com reports 1104 2 0
9 jtize@sssssss.com identity 1104 3 0
10 jtize@sssssss.com landing page 1104 4 1
Мне удалось получить следующее с помощью SQL PIVOT, но это не совсем удовлетворяет потребности приложения.
PIVOT Query (обратите внимание, что результаты были усечены для упрощения)
WITH UserData AS
(
SELECT ISNULL(CAST((ROW_NUMBER() OVER (order by u.Id, a.Id)) as int), 0)
as Id, u.UserName AS [User],
a.Description AS Application, ca.CompanyId, u.Id AS UserId, a.Id AS ApplicationId
FROM dbo.Application AS a LEFT OUTER JOIN
dbo.CompanyApplication AS ca ON ca.ApplicationId = a.Id RIGHT OUTER JOIN
dbo.AspNetUsers AS u ON u.CompanyId = ca.CompanyId
)
SELECT *
FROM (
SELECT [User], [CompanyId], [ApplicationId], [Application]
FROM (SElect * from UserData where id < 13) x
) as s
PIVOT (
MIN([ApplicationId])
FOR [Application] in (
[members], [identity], [admin], [contractor qualification], [audits],
[landing page], [sitetracker], [reports], [authorization]
)
)
as pvt
Результаты:
User members identity landing page reports authorization
------------------- -------- --------- ------------ ----------- -------------
dg@spw.com 1 3 4 2 7
jtize@sssssss.com 1 3 4 2 0
yes@way.com 1 NULL NULL NULL NULL
Реальный результат должен быть одним из трех значений (applicationid, 0,и -1).Необходимый результат выглядит следующим образом:
User members identity landing page reports authorization
------------------- -------- --------- ------------ ----------- -------------
dg@spw.com 1 3 4 2 7
jtize@sssssss.com 1 3 -1 2 0
yes@way.com 1 0 0 0 0
Обратите внимание, что -1 для ограниченного столбца