2016-05-06 3 views
-1

У меня есть запрос, чтобы найти общий счет каждого работника. Когда я запускаю запрос, результат outCount ошибочен. Я не совсем уверен, что я ошибаюсь. Любые предложения были бы замечательными.Ошибка подсчета подзапроса SQL

SELECT 
    r1.RegionID, 
    r1.rDate, 
    r1.tCount, 
    r1.sCount, 
    r1.outCount, 
    r1.cm, 
    r1.sCalc + r1.oCalc + r1.tCalc + r1.cmCalc AS dayScore, 
    r1.createPID 
FROM (SELECT 
    q1.RegionID, 
    ROUND(q1.tCount * 0.363636364, 9) AS tCalc, 
    ROUND(q1.sCount * 0.181818182, 9) AS sCalc, 
    ROUND(q1.outCount * 0.090909091, 9) AS oCalc, 
    ROUND(q1.cm * 0.363636364, 9) AS cmCalc, 
    q1.rDate, 
    q1.tCount, 
    q1.sCount, 
    q1.outCount, 
    q1.cm, 
    q1.createPID 
FROM (SELECT 
    q1.RegionID, 
    q1.rDate, 
    q1.tCount, 
    q1.sCount, 
    q1.outCount, 
    q1.cm, 
    q1.createPID 
FROM (SELECT 
    SecurityPrincipal.RegionID, 
    CONVERT(NVARCHAR, Ticket.dtCreate, 107) AS rDate, 
    COUNT(Ticket.ticketID) AS tCount, 
    COUNT(SRO.SROID) AS sCount, 
    COUNT(o.NoteID) AS outCount, 
    COUNT(cm.NoteID) AS cm, 
    Ticket.createPID 
FROM CDOC.rpt.Ticket 
LEFT OUTER JOIN CDOC.rpt.SRO 
    ON SRO.ticketID = Ticket.ticketID 
LEFT OUTER JOIN (SELECT 
    Notes.NoteID, 
    Notes.ticketID, 
    Notes.noteCategoryID 
FROM CDOC.rpt.Notes 
WHERE Notes.noteCategoryID = '24') o 
    ON o.ticketID = Ticket.ticketID 
LEFT OUTER JOIN (SELECT 
    Notes.NoteID, 
    Notes.ticketID 
FROM CDOC.rpt.Notes 
WHERE Notes.noteSubCategoryID = '13' 
OR Notes.noteSubCategoryID = '16' 
OR Notes.noteCategoryID = '22') cm 
    ON cm.ticketID = Ticket.ticketID 
INNER JOIN CDOC.rpt.SecurityPrincipal 
    ON SecurityPrincipal.pid = Ticket.createPID 
GROUP BY CONVERT(NVARCHAR, Ticket.dtCreate, 107), 
     SecurityPrincipal.RegionID, 
     Ticket.createPID) q1) q1) r1 
+0

Было бы полезно, если вы можете предоставить схему таблицы, выборочные данные, ожидаемый результат и неверный результат. – ydoow

ответ

1

Эта логика:

COUNT(Ticket.ticketID) AS tCount, 
    COUNT(SRO.SROID) AS sCount, 
    COUNT(o.NoteID) AS outCount, 
    COUNT(cm.NoteID) AS cm, 

очень подозрительно. Если идентификаторы не равны нулю, все они возвращают одно и то же значение. Помните: count() подсчитывает количество значений, отличных от NULL.

Я думаю, что вы просто хотите COUNT(DISTINCT):

COUNT(DISTINCT Ticket.ticketID) AS tCount, 
    COUNT(DISTINCT SRO.SROID) AS sCount, 
    COUNT(DISTINCT o.NoteID) AS outCount, 
    COUNT(DISTINCT cm.NoteID) AS cm, 
Смежные вопросы