필드의 조건부 개수
다음과 같은 테이블이 있다면 :
jobId, jobName, Priority
우선 순위는 1에서 5 사이의 정수일 수 있습니다.
보고서에서 차트를 생성하려면이 쿼리가 필요하므로 작업 ID, 작업 이름 및 Priority1, Priority2, Priority3, Priority4라는 5 개의 필드를 표시해야합니다. 우선 순위 5.
Priority1은 우선 순위 필드의 값이 1 인 행 수를 계산해야합니다.
Priority2는 우선 순위 필드의 값이 2 인 행 수를 계산해야합니다.
Priority3은 우선 순위 필드의 값이 3 인 행 수를 계산해야합니다.
기타
어떻게하면 빠르고 효율적으로 할 수 있습니까?
많은 감사합니다, Kave
나는 당신이 후일 것 같아요
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이 필요한지 확실하지 않습니다. 그러면 제거하고 그룹을 제거하십시오.
SUM 대신 COUNT를 사용하면 ELSE 문에 대한 요구 사항이 제거됩니다.
SELECT jobId, jobName,
COUNT(CASE WHEN Priority=1 THEN 1 END) AS Priority1,
COUNT(CASE WHEN Priority=2 THEN 1 END) AS Priority2,
COUNT(CASE WHEN Priority=3 THEN 1 END) AS Priority3,
COUNT(CASE WHEN Priority=4 THEN 1 END) AS Priority4,
COUNT(CASE WHEN Priority=5 THEN 1 END) AS Priority5
FROM TableName
GROUP BY jobId, jobName
IIF
표준 SQL 구문은 아니지만 데이터베이스에서 지원하는 경우 동일한 결과를 생성하는보다 우아한 문을 얻을 수 있습니다.
SELECT JobId, JobName,
COUNT(IIF (Priority=1, 1, NULL)) AS Priority1,
COUNT(IIF (Priority=2, 1, NULL)) AS Priority2,
COUNT(IIF (Priority=3, 1, NULL)) AS Priority3,
COUNT(IIF (Priority=4, 1, NULL)) AS Priority4,
COUNT(IIF (Priority=5, 1, NULL)) AS Priority5
FROM TableName
GROUP BY JobId, JobName
ANSI SQL-92 CASE 문을 사용하면 다음과 같은 작업을 수행 할 수 있습니다 (파생 된 테이블과 케이스).
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 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
테이블 자체에 대해 조인 할 수 있습니다.
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
작업 ID, 작업 이름 및 Priority1, Priority2, Priority3, Priority4라는 5 개의 필드를 표시해야합니다. 우선 순위 5.
쿼리 디자인에 문제가 있습니다. 각 행에도 특정 작업이 표시되므로 행에 '0'이있는 4 개의 우선 순위 열과 '1'(해당 작업의 우선 순위)이있는 1 개의 우선 순위 열이있는 상황이 발생합니다. 또는 모든 행의 모든 우선 순위에 대한 카운트를 반복하게됩니다.
여기에 무엇을 보여주고 싶습니까?
이 시도:
SELECT Count(Student_ID) as 'StudentCount'
FROM CourseSemOne
where Student_ID=3
Having Count(Student_ID) < 6 and Count(Student_ID) > 0;
참고URL : https://stackoverflow.com/questions/1288058/conditional-count-on-a-field
'Development Tip' 카테고리의 다른 글
Javascript, Razor 및 Escape 문자. (0) | 2020.12.13 |
---|---|
Python 'self'키워드 (0) | 2020.12.13 |
API를 통해 미디어 위키 페이지에서 텍스트 콘텐츠 가져 오기 (0) | 2020.12.13 |
PostgreSQL에서 공간 계산 및 절약 (0) | 2020.12.13 |
Android : 현재 위치에서 EditText에 텍스트 삽입 (0) | 2020.12.13 |