При использовании.NET , атрибут сборки InternalsVisibleTo позволяет Вам создавать "друга" блоки. Это определенные сборки со строгим именем, которым позволяют получить доступ к внутренним классам и участникам другого блока.
Примечание, это должно использоваться с усмотрением, поскольку оно сильно связывает включенные блоки. Общее использование для InternalsVisibleTo для проектов поблочного тестирования. Это - вероятно, не хороший выбор для использования в Ваших блоках реального приложения по вышеизложенной причине.
Пример:
[assembly: InternalsVisibleTo("NameAssemblyYouWantToPermitAccess")]
namespace NameOfYourNameSpace
{
Я думаю, что вы можете быть после
select
jobID, JobName,
sum(case when Priority = 1 then 1 else 0 end) as priority1,
sum(case when Priority = 2 then 1 else 0 end) as priority2,
sum(case when Priority = 3 then 1 else 0 end) as priority3,
sum(case when Priority = 4 then 1 else 0 end) as priority4,
sum(case when Priority = 5 then 1 else 0 end) as priority5
from
Jobs
group by
jobID, JobName
. Однако я не уверен, нужны ли вам jobID и JobName в ваших результатах, если поэтому удалите их и удалите группу,
Используя операторы CASE ANSI SQL-92, вы можете сделать что-то вроде этого (производная таблица плюс регистр):
SELECT jobId, jobName, SUM(Priority1)
AS Priority1, SUM(Priority2) AS
Priority2, SUM(Priority3) AS
Priority3, SUM(Priority4) AS
Priority4, SUM(Priority5) AS
Priority5 FROM (
SELECT jobId, jobName,
CASE WHEN Priority = 1 THEN 1 ELSE 0 END AS Priority1,
CASE WHEN Priority = 2 THEN 1 ELSE 0 END AS Priority2,
CASE WHEN Priority = 3 THEN 1 ELSE 0 END AS Priority3,
CASE WHEN Priority = 4 THEN 1 ELSE 0 END AS Priority4,
CASE WHEN Priority = 5 THEN 1 ELSE 0 END AS Priority5
FROM TableName
)
Вы можете присоединиться к таблице против самой себя:
select
t.jobId, t.jobName,
count(p1.jobId) as Priority1,
count(p2.jobId) as Priority2,
count(p3.jobId) as Priority3,
count(p4.jobId) as Priority4,
count(p5.jobId) as Priority5
from
theTable t
left join theTable p1 on p1.jobId = t.jobId and p1.jobName = t.jobName and p1.Priority = 1
left join theTable p2 on p2.jobId = t.jobId and p2.jobName = t.jobName and p2.Priority = 2
left join theTable p3 on p3.jobId = t.jobId and p3.jobName = t.jobName and p3.Priority = 3
left join theTable p4 on p4.jobId = t.jobId and p4.jobName = t.jobName and p4.Priority = 4
left join theTable p5 on p5.jobId = t.jobId and p5.jobName = t.jobName and p5.Priority = 5
group by
t.jobId, t.jobName
Или вы можете использовать прецедент внутри суммы:
select
jobId, jobName,
sum(case Priority when 1 then 1 else 0 end) as Priority1,
sum(case Priority when 2 then 1 else 0 end) as Priority2,
sum(case Priority when 3 then 1 else 0 end) as Priority3,
sum(case Priority when 4 then 1 else 0 end) as Priority4,
sum(case Priority when 5 then 1 else 0 end) as Priority5
from
theTable
group by
jobId, jobName
Мне нужно будет отобразить идентификатор задания, имя задания и 5 полей с именами Priority1, Priority2, Priority3, Priority4 . Priority5.
Что-то не так с дизайном вашего запроса. Вы также показываете конкретное задание в каждой строке, и поэтому у вас будет ситуация, когда любая строка имеет четыре столбца приоритета с '0' и один столбец приоритета с '1' (приоритет для этого задания) или вы в конечном итоге будете повторять подсчет для всех приоритетов в каждой строке.
Что вы действительно хотите здесь показать?
SELECT Priority, COALESCE(cnt, 0)
FROM (
SELECT 1 AS Priority
UNION ALL
SELECT 2 AS Priority
UNION ALL
SELECT 3 AS Priority
UNION ALL
SELECT 4 AS Priority
UNION ALL
SELECT 5 AS Priority
) p
LEFT JOIN
(
SELECT Priority, COUNT(*) AS cnt
FROM jobs
GROUP BY
Priority
) j
ON j.Priority = p.Priority