나는 오늘 약간 엉성한 순간을 보내고있는 것처럼 보이며 테이블에서 하위 선택 카운트를 수행하는 더 좋은 방법을 찾을 수없는 것 같습니다.
기본적으로 내가해야 할 일은 각각의 개별 공급 업체에 대해 2 개의 카운트 (동일한 테이블에서)가 해당 공급 업체에 할당 된 총 레코드에 대해 하나와 해당 공급 업체에 대해 분쟁 레코드에 대해 하나가 필요합니다. 현재 기술적으로 정확하지만 1 mill + 레코드가있는 테이블에서 지옥처럼 느린 쿼리가 있습니다. 더 나은 방법이있을 거라고 확신하지만 오늘 아침에 제 삶을 위해 해결할 수는 없습니다.
SELECT
DISTINCT tblsuppliers.SupplierName,
(SELECT COUNT(*) FROM tblmovements a WHERE m.Supplier=a.Supplier AND a.TicketStatus IN(0,1) AND a.DateRequired>='2013-09-01 00:00:00' AND a.DateRequired<='2013-11-30 23:59:59') as 'Total Tickets',
(SELECT COUNT(*) FROM tblmovements b WHERE m.Supplier=b.Supplier AND b.TicketStatus IN(0,1) AND b.DateRequired>='2013-09-01 00:00:00' AND b.DateRequired<='2013-11-30 23:59:59' AND (b.SuppIsDisputed=1 OR b.SuppDisputeClearedBy>0)) as 'Total Disputed'
FROM tblmovements m
INNER JOIN tblsuppliers ON m.Supplier=tblsuppliers.ID
ORDER BY tblsuppliers.SupplierName ASC
조인 된 테이블은 이동 테이블에 저장된 공급자 ID가 아닌 공급자 이름을 제공하기위한 것입니다. 어떤 제안이라도 대단히 감사합니다.
이 시도:
SELECT s.SupplierName,
SUM(CASE WHEN m.TicketStatus IN(0,1) AND m.DateRequired>='2013-09-01 00:00:00' AND
m.DateRequired<='2013-11-30 23:59:59' THEN 1 ELSE 0
END) AS 'Total Tickets',
SUM(CASE WHEN m.TicketStatus IN(0,1) AND m.DateRequired>='2013-09-01 00:00:00' AND
m.DateRequired<='2013-11-30 23:59:59' AND
(m.SuppIsDisputed=1 OR m.SuppDisputeClearedBy>0) THEN 1 ELSE 0
END) AS 'Total Disputed'
FROM tblmovements m
INNER JOIN tblsuppliers s ON m.Supplier=s.ID
GROUP BY s.ID
ORDER BY s.SupplierName ASC
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다