У меня есть таблица под названием album
со следующими столбцами:
Album_Id, User_Id, Report_Id, PhotoName
Существуют разные Photoname
в комбинации User_Id
и Report_Id
Подобно:
Album_Id User_Id Report_Id PhotoName
1 1 16 A.jpg
2 1 16 B.jpg
3 2 17 C.jpg
4 2 17 D.jpg
Я просто хочу получить данные в формате
User_Id Report_Id PhotoName1 PhotoName2
1 16 A.jpg B.jpg
2 17 C.jpg D.jpg
Максимальное количество фотографий - 4 ...
2
Supriya Srivastava
29 Авг 2011 в 16:00
2 ответа
Лучший ответ
WITH cte
AS ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY User_Id, Report_Id ORDER BY Album_Id ) AS RN
FROM T
)
SELECT User_Id ,
Report_Id ,
MAX(CASE WHEN RN = 1 THEN PhotoName
END) AS PhotoName1 ,
MAX(CASE WHEN RN = 2 THEN PhotoName
END) AS PhotoName2 ,
MAX(CASE WHEN RN = 3 THEN PhotoName
END) AS PhotoName3 ,
MAX(CASE WHEN RN = 4 THEN PhotoName
END) AS PhotoName4
FROM cte
GROUP BY User_Id ,
Report_Id
3
Derek Kromm
29 Авг 2011 в 12:08
SELECT a.User_Id, a.Report_Id, a.PhotoName as 'PhotoName1', a2.PhotoName as 'PhotoName2', a3.PhotoName as 'PhotoName3', a4.PhotoName as 'PhotoName4'
FROM album a
LEFT JOIN album a2 on a2.User_Id = a.User_Id and a2.Report_Id = a.Report_Id AND a2.Album_Id != a.Album_Id
LEFT JOIN album a3 on a3.User_Id = a.User_Id and a3.Report_Id = a.Report_Id AND a3.Album_id NOT IN (a.Album_Id, a2.Album_Id)
LEFT JOIN album a4 on a4.User_Id = a.User_Id and a4.Report_Id = a.Report_Id AND a4.Album_id NOT IN (a.Album_Id, a2.Album_Id, a3.Album_Id)
ORDER BY a.User_Id, a.Report_Id ASC;
0
Kyro
29 Авг 2011 в 12:33
Похожие вопросы
Новые вопросы
sql-server
Microsoft SQL Server - это система управления реляционными базами данных (RDBMS). Используйте этот тег для всех выпусков SQL Server, включая Compact, Express, Azure, Fast-track, APS (ранее PDW) и Azure SQL DW. Не используйте этот тег для других типов СУБД (MySQL, PostgreSQL, Oracle и т. Д.). Не используйте этот тег для проблем, связанных с разработкой программного обеспечения и мобильных устройств, если только он не связан напрямую с базой данных.