2017-01-24 1 views
-1

Ich habe an einer Abfrage mit einem Peer gearbeitet und es hat einige ungewöhnliche Zahlen zurückgekehrt. Die Abfrage ist ein Produktivitätsbericht. Ich versuche, alle abrechenbaren Einheiten für einen bestimmten Endbenutzer zusammenzufassen, diese Summe mit dem erwarteten Einzelwert zu vergleichen und dann die Differenz zwischen diesen beiden Zahlen innerhalb einer Woche zu berechnen. Hier ist, was wir mit so weit gekommen sind:SQL-Abfrage insgesamt im Vergleich zu einem einzelnen Wert

SELECT 
Employees.emp_id, 
Employees.last_name+', '+Employees.first_name as staff_name, 
SUM(VisitQuery.billed_value)/60 AS billed_value, 
SUM(StandardQuery.num8) as expected_value 
FROM 
Employees 
INNER JOIN 
(
    SELECT 
    ClientVisit.duration AS billed_value, 
    ClientVisit.emp_id, 
    ClientVisit.client_id 
    FROM 
    ClientVisit 
    WHERE 
    ClientVisit.non_billable = 0 AND 
    ClientVisit.rev_timeout >= @param1 AND 
    ClientVisit.rev_timeout <= @param2 
) VisitQuery 
ON VisitQuery.emp_id = Employees.emp_id 
INNER JOIN 
(
SELECT DISTINCT 
    CaseloadQuery.emp_id, 
    ClientsExt.num8 
FROM 
(
    SELECT 
    ClientVisit.duration AS billed_value, 
    ClientVisit.emp_id, 
    ClientVisit.client_id 
    FROM 
    ClientVisit 
    WHERE 
    ClientVisit.non_billable = 0 AND 
    ClientVisit.rev_timeout >= @param1 AND 
    ClientVisit.rev_timeout <= @param2 
) CaseloadQuery 
INNER JOIN ClientsExt 
ON CaseloadQuery.client_id = ClientsExt.client_id 
) StandardQuery 
ON Employees.emp_id = StandardQuery.emp_id 
GROUP BY 
Employees.emp_id, 
Employees.last_name+', '+Employees.first_name`enter code here` 

Die Rückkehr kommt wie folgt aussehen:

emp_id  staff_name  billed_value expected_value 
X   X    74    231 
XX   XX    108    279 
XXX   XXX    19    72 

Hat jemand irgendwelche Gedanken? Der erwartete Wert sollte wirklich nicht höher als 40 Stunden für die Woche sein.

+0

Könnten Sie Klasse/Domain Diagramm? es wäre wirklich hilfreich, Prost – Tatranskymedved

+0

Es tut mir leid, aber ich bin relativ neu in SQL, so bin ich nicht genau sicher, was Sie mich fragen. –

+0

Kann in der Tabelle 'ClientVisit' derselbe Mitarbeiter (' emp_id') mehrere Zeilen haben, die zu mehreren Werten von 'client_id' führen? – leeyuiwah

Antwort

0

In der Tabelle ClientVisit kann derselbe Mitarbeiter (emp_id) mehrere Zeilen haben, die zu mehreren Werten von client_id führen? Wenn die Antwort ja ist, dann denke ich, dass Sie auch eine auf client_id

tun sollten Unten versuchte ich, Ihre Abfrage neu zu schreiben (achten Sie auf die mit "hinzufügen" und "löschen" markierten Zeilen).

Haftungsausschluss: Ich weiß nicht Ihre tatsächlichen DB-Tabellen haben, um meine Abfrage zu testen, so kann es syntaktische und semantische Fehler haben

SELECT 
    Employees.emp_id, 
    StandardQuery.client_id,          -- add 
    Employees.last_name+', '+Employees.first_name as staff_name, 
    SUM(VisitQuery.billed_value)/60 AS billed_value, 
    SUM(StandardQuery.num8) as expected_value 
FROM 
    Employees 
    INNER JOIN 
     (
      SELECT 
       ClientVisit.duration AS billed_value, 
       ClientVisit.emp_id, 
       ClientVisit.client_id 
      FROM 
       ClientVisit 
      WHERE 
       ClientVisit.non_billable = 0 AND 
       ClientVisit.rev_timeout >= @param1 AND 
       ClientVisit.rev_timeout <= @param2 
     ) VisitQuery 
     ON VisitQuery.emp_id = Employees.emp_id 
    INNER JOIN 
     (
      SELECT DISTINCT 
       CaseloadQuery.emp_id, 
       ClientsExt.num8, 
       ClientsExt.client_id        -- add 
      FROM 
       (
        SELECT 
         -- ClientVisit.duration AS billed_value, -- delete 
         ClientVisit.emp_id, 
         ClientVisit.client_id 
        FROM 
         ClientVisit 
        WHERE 
         ClientVisit.non_billable = 0 AND 
         ClientVisit.rev_timeout >= @param1 AND 
         ClientVisit.rev_timeout <= @param2 
       )CaseloadQuery 
       INNER JOIN ClientsExt 
        ON CaseloadQuery.client_id = ClientsExt.client_id 
     )StandardQuery 
      ON Employees.emp_id = StandardQuery.emp_id 
GROUP BY 
    Employees.emp_id, 
    -- Employees.last_name+', '+Employees.first_name    -- delete 
    StandardQuery.client_id           -- add 
Verwandte Themen