Условное выражение Рассчитывает на поле

При использовании.NET , атрибут сборки InternalsVisibleTo позволяет Вам создавать "друга" блоки. Это определенные сборки со строгим именем, которым позволяют получить доступ к внутренним классам и участникам другого блока.

Примечание, это должно использоваться с усмотрением, поскольку оно сильно связывает включенные блоки. Общее использование для InternalsVisibleTo для проектов поблочного тестирования. Это - вероятно, не хороший выбор для использования в Ваших блоках реального приложения по вышеизложенной причине.

Пример:

[assembly: InternalsVisibleTo("NameAssemblyYouWantToPermitAccess")]
namespace NameOfYourNameSpace
{

58
задан Houman 17 August 2009 в 13:49
поделиться

5 ответов

Я думаю, что вы можете быть после

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 в ваших результатах, если поэтому удалите их и удалите группу,

109
ответ дан 24 November 2019 в 18:39
поделиться

Используя операторы 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


)
4
ответ дан 24 November 2019 в 18:39
поделиться

Вы можете присоединиться к таблице против самой себя:

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
1
ответ дан 24 November 2019 в 18:39
поделиться

Мне нужно будет отобразить идентификатор задания, имя задания и 5 полей с именами Priority1, Priority2, Priority3, Priority4 . Priority5.

Что-то не так с дизайном вашего запроса. Вы также показываете конкретное задание в каждой строке, и поэтому у вас будет ситуация, когда любая строка имеет четыре столбца приоритета с '0' и один столбец приоритета с '1' (приоритет для этого задания) или вы в конечном итоге будете повторять подсчет для всех приоритетов в каждой строке.

Что вы действительно хотите здесь показать?

-2
ответ дан 24 November 2019 в 18:39
поделиться
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
1
ответ дан 24 November 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: