У меня 3 таблицы Project
departments
и projectStatus
Отдел
ID Name
1 Software
2 XML1
. .
. .
Проект
ID Name DeptID StatusID
1 Prj1 1 1
2 prj2 2 2
. . . .
. . . .
projectStatus
ID Name
1 InProgress
2 Pending
. .
. .
Хочу комбинацию ниже:
![enter image description here](https://i.stack.imgur.com/p3iJv.png)
Я пробовал это
SELECT
Status=[Name],
Software=(
SELECT COUNT(*)
FROM Projects
WHERE StatusID=PS.ID and DeptI =1
),
XML1=(
SELECT COUNT(*)
FROM Projects
WHERE CurrentStatusID=PS.ID and DeptID=2
),
Imaging=(
SELECT COUNT(*)
FROM Projects
WHERE CurrentStatusID=PS.ID and DeptID =3
)
FROM
[MIS_STORE].[dbo].[M_ProjectStatuses] PS
Здесь я хочу, чтобы количество столбцов получалось динамически в зависимости от количества отделов.
Заранее спасибо ...
Edit: Решение
DECLARE @cols NVARCHAR(2000);
DECLARE @query NVARCHAR(4000);
SELECT @cols = COALESCE(@cols + ',[' + Name + ']',
'[' + Name + ']')
FROM M_Departments
ORDER BY Name
SET @query = 'SELECT [Status], '+
@cols +'
FROM
(SELECT Projects.Name,
M_Departments.Name AS dept,
M_ProjectStatuses.Name AS [Status]
FROM Projects INNER JOIN
M_Departments ON Projects.M_DeptID = M_Departments.ID INNER JOIN
M_ProjectStatuses ON Projects.CurrentStatusID = M_ProjectStatuses.ID) test
PIVOT
(
count(name)
FOR dept IN
( '+ @cols +')) p '
EXECUTE(@query)