2017-01-24 2 views
-1

Я работал над запросом с одноранговым узлом, и он возвращал некоторые необычные числа. Запрос представляет собой отчет о производительности. Я пытаюсь суммировать все оплачиваемые единицы для определенного конечного пользователя, сравнивать это общее с единственным ожидаемым значением и затем вычислять разницу между этими двумя числами в течение 1 недели. Вот то, что мы придумали до сих пор:Общее количество запросов SQL к одному значению

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` 

Ответный выходит глядя, как это:

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

Кто-нибудь есть какие-либо мысли? Ожидаемое значение должно быть не выше, чем 40 часов в неделю.

+0

могли бы вы предоставить диаграмму классов/домен? это было бы очень полезно, приветствия – Tatranskymedved

+0

Прошу прощения, но я относительно новичок в SQL, поэтому я не совсем уверен, что вы просите меня. –

+0

В таблице 'ClientVisit' может ли один и тот же сотрудник (' emp_id') иметь несколько строк, которые приводят к нескольким значениям 'client_id'? – leeyuiwah

ответ

0

В таблице ClientVisit, может тот же сотрудник (emp_id) имеет несколько строк, которые приводят к нескольким значениям client_id? Если да, то я думаю, что вы также должны сделать GROUP BY на client_id

Ниже я попытался переписать запрос (обратите внимание на строки с надписью «добавить» и «удалить»).

Отказ от ответственности: Я не фактические таблицы БД, чтобы проверить мой запрос, поэтому он может иметь синтаксис и семантические ошибки

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 
Смежные вопросы