Как я могу исключить подзапрос из этого SQL-запроса? - PullRequest
0 голосов
/ 15 ноября 2011

У меня есть запрос, который должен работать, но, похоже, я жертва плохой технологии базы данных.Мне нужно выполнить запрос ниже для базы данных Pervasive SQL.Производитель продукта, использующего Pervasive, сообщает мне, что используется версия 10, которая должна поддерживать подзапросы, но мне еще не удалось запустить даже простой подзапрос.Поэтому мне интересно, можно ли переписать следующий запрос, чтобы исключить подзапрос:

SELECT
    OuterTime.Employee,
    OuterTime.Date,        
    OuterTime.Pay_ID,        
    OuterTime.Description,        
    OuterTime.Equipment,        
    OuterTime.JC_Cost_Code,        
    OuterTime.JC_Category,        
    OuterTime.Units,  
    (   
        SELECT
            SUM(SubQueryTime.Units)
        FROM
            PRT_NEW__TIME AS SubQueryTime
        WHERE
            SubQueryTime.Employee = OuterTime.Employee
        GROUP BY
            SubQueryTime.Employee
    ) AS TotalHoursForEmp
FROM
    PRT_NEW__TIME AS OuterTime

Ответы [ 2 ]

0 голосов
/ 15 ноября 2011

Не Pervasive SQL парень, но будет ли это работать?Не уверен, что он соответствует целям вашего запроса:

SELECT
    OuterTime.Employee,
    OuterTime.Date,        
    OuterTime.Pay_ID,        
    OuterTime.Description,        
    OuterTime.Equipment,        
    OuterTime.JC_Cost_Code,        
    OuterTime.JC_Category,        
    SUM(OuterTime.Units) AS TotalHoursForEmp
    GROUP BY OuterTime.Employee, OuterTime.Date, OuterTime.Pay_ID,
             OuterTime.Description, OuterTime.Equipment, OuterTime.JC_Cost_Code,
             OuterTime.JC_Category
FROM
    PRT_NEW__TIME AS OuterTime
0 голосов
/ 15 ноября 2011

В стандартном SQL вы можете сделать это, хотя я не имею никакого представления о PervasiveSQL, в частности ...

SELECT
    OuterTime.Employee,
    OuterTime.Date,        
    OuterTime.Pay_ID,        
    OuterTime.Description,        
    OuterTime.Equipment,        
    OuterTime.JC_Cost_Code,        
    OuterTime.JC_Category,        
    OuterTime.Units,
    COALESCE(TotalHoursForEmp.TotalUnits, 0)  AS TotalUnits
FROM
    PRT_NEW__TIME AS OuterTime
LEFT JOIN
    (   
        SELECT
            Employee,
            SUM(Units) AS TotalUnits
        FROM
            PRT_NEW__TIME
        GROUP BY
            Employee
    )
    AS TotalHoursForEmp
        ON TotalHoursForEmp.Employee = OuterTime.Employee
...