您可以使用以下查询
SELECT JobID,JobTitle,[1],[2],[3],[4],[5],[6],[7],[8]
FROM
(
SELECT j.JobID,j.JobTitle,r.LocationID,r.RequestID
FROM Jobs j
LEFT JOIN Requests r ON r.JobID=j.JobID
) q PIVOT(COUNT(RequestID) FOR LocationID IN([1],[2],[3],[4],[5],[6],[7],[8])) p
如果您想使用动态列数,可以生成脚本并使用EXEC执行
DECLARE @locationIDs varchar(200)=''
SELECT @locationIDs+=CONCAT(',[',LocationID,']')
FROM Locations
ORDER BY LocationID
SET @locationIDs=STUFF(@locationIDs,1,1,'')
--PRINT @locationIDs
DECLARE @query varchar(1000)=CONCAT('SELECT JobID,JobTitle,',@locationIDs,'
FROM
(
SELECT j.JobID,j.JobTitle,r.LocationID,r.RequestID
FROM Jobs j
LEFT JOIN Requests r ON r.JobID=j.JobID
) q PIVOT(COUNT(RequestID) FOR LocationID IN(',@locationIDs,')) p')
--PRINT @query
EXEC(@query)
带有位置标题的变体
DECLARE
@locationIDs varchar(200)='',
@locationTitles varchar(2000)=''
SELECT
@locationIDs+=CONCAT(',[',LocationID,']'),
@locationTitles+=CONCAT(',[',LocationID,'] [',LocationName,']')
FROM Locations
ORDER BY LocationID
SET @locationIDs=STUFF(@locationIDs,1,1,'')
SET @locationTitles=STUFF(@locationTitles,1,1,'')
--PRINT @locationIDs
--PRINT @locationTitles
DECLARE @query varchar(2000)=CONCAT('SELECT JobID,JobTitle,',@locationTitles,'
FROM
(
SELECT j.JobID,j.JobTitle,r.LocationID,r.RequestID
FROM Jobs j
LEFT JOIN Requests r ON r.JobID=j.JobID
) q PIVOT(COUNT(RequestID) FOR LocationID IN(',@locationIDs,')) p')
--PRINT @query
EXEC(@query)