2015-02-19 2 views
1

EDITИсключение полей из группы по в подзапроса

Я сделал работу запроса с помощью Хокенберри! Благодарю. Но у меня есть еще одна проблема. Моя структура таблицы планировщика времени выглядит следующим образом.

Material no|Production time|Production place 
12345|2,10|Robot 
12345|7,40|Machining 
67890|2,34|Machining 
34567|9,93|Manuel 

Мой запрос требует времени от таблицы времени, если он соответствует месту производства из отчета таблицы.

я хочу результат запроса, чтобы добавить время производства второго места продукции на сумме группировку [дата производства], [Производство место], [Shift]

других слов я не хочу, чтобы сгруппировать запрос по отчету. ID, Отчет. [Дата создания], Отчет. [Ответственный] и Отчет. [Число рабочих], , но Временной план. [Место производства]. Но я хочу получить эти результаты в строке, которая берется из таблицы отчетов.

SELECT *, 

(TotalInterruptDuration + TotalReworkDuration + TotalOvertimeDuration) AS TotalSum 

FROM (
SELECT 
    Report.ID, 
    Report.[Creation date], 
    Report.[Production date], 
    Report.[Production place], 
    Report.[Shift], 
    Report.[Responsible], 
    Report.[Number of workers], 

    (SELECT Sum(Interrupts.[Interrupt duration]) 
    FROM Interrupts 
    WHERE Interrupts.ID=Report.ID) AS TotalInterruptDuration, 

    (SELECT Sum([Rework].[Rework duration]) 
    FROM [Rework] 
    WHERE [Rework].ID=Report.ID) AS TotalReworkDuration, 

    (SELECT Sum(Overtime.[Overtime duration]) 
    FROM Rework 
    WHERE Rework.ID=Report.ID) AS TotalOvertimeDuration, 

    Year([Report]![Production date]) AS Year, 
    DatePart("ww",[Report]![Production date]-1) AS Week, 
    Month(Report![Production date]) AS Month, 

    Sum(Quantity.[Quantity] * Timeplan.[Production.time]) AS CalcValue 

FROM (Report 

    INNER JOIN Quantity ON Quantity.ID = Report.ID) 
    INNER JOIN Timetable ON Report.[Production place] = Timetable.[Production place] AND Quantity.[Material no] = Timeplan.[Material no] 
    GROUP BY Report.ID, Report.[Creation date], Report.[Production date], Report.[Production place], Report.[Shift], Report.[Responsible], Report.  [Number of workers]) 
    tmp 

........................................... ...

Прежде всего извините за мой плохой английский. У меня есть запрос следующим образом.

SELECT 
    Report.ID, 
    Report.[Creation date], 
    Report.[Production date], 
    Report.[Production place], 
    Report.[Shift], 
    Report.[Responsible], 
    Report.[Number of workers], 

    (SELECT Sum(Interrupts.[Interrupt duration]) 
    FROM Interrupts 
    WHERE Interrupts.ID=Report.ID) AS TotalInterruptDuration, 

    (SELECT Sum([Rework].[ Rework duration]) 
    FROM [Rework] 
    WHERE [Rework].ID=Report.ID) AS TotalReworkDuration, 

    (SELECT Sum(Overtime.[Overtime duration]) 
    FROM Overtime 
    WHERE Overtime.ID=Report.ID) AS TotalOvertimeDuration, 

    Year([Report]![Production date]) AS Year, 
    DatePart("ww",[Report]![Production date]-1) AS Week, 
    Month(Report![Production date]) AS Month 

FROM Report 

Мой первый вопрос Я хотел бы Sum TotalInterruptDuration, TotalReworkDuration, TotalOvertimeDuration в той же строке.

И второй вопрос, который гораздо более важен; Я хочу присоединиться к таблице отчета и количества, если ID соответствует и умножает отчет. [Число рабочих] с суммой [Время производства], полученное из соответствующего [Материал нет], путем объединения таблиц [Количество] и [Таймплан].

Например, я хочу посмотреть количество таблиц для id (1), а затем умножить время производства материала 12345 на 10 (количество) и время производства 67890 и умножить его на 11 (количество) и время производства 34567 и умножить он имеет 7 (количество) и значения суммы и печатает в запросе.

Мои таблицы выглядят так.

**Table Report** 

    *ID  Creation date Production date Production place Shift Responsible Number of workers* 


    1 01.01.2015 01.01.2015  Robot   2 Omer  12 

    2 02.01.2015 02.01.2015  Robot   3 Erdem  15 

    3 03.01.2015 03.01.2015  Machining  2 Sukru  4 

    4 

    **Table Quantity** 


    *ID Quantity Material No* 

    1 10  12345 

    1 11  67890 

    1 7  34567 

    2 3  12345 

    3 6  67890 

    3 6  34567 

4 5  12345 

    **Table Timeplan** 

     *Material No Production Time* 

     12345  34 

     67890  11 

     34567  21 

ответ

1

правка Вопрос 1:

SELECT *, 
    TotalSum = (TotalInterruptDuration + TotalReworkDuration + TotalOvertimeDuration) 
FROM (
    SELECT 
     Report.ID, 
     Report.[Creation date], 
     Report.[Production date], 
     Report.[Production place], 
     Report.[Shift], 
     Report.[Responsible], 
     Report.[Number of workers], 

     (SELECT Sum(Interrupts.[Interrupt duration]) 
     FROM Interrupts 
     WHERE Interrupts.ID=Report.ID) AS TotalInterruptDuration, 

     (SELECT Sum([Rework].[ Rework duration]) 
     FROM [Rework] 
     WHERE [Rework].ID=Report.ID) AS TotalReworkDuration, 

     (SELECT Sum(Overtime.[Overtime duration]) 
     FROM Overtime 
     WHERE Overtime.ID=Report.ID) AS TotalOvertimeDuration, 

     Year([Report]![Production date]) AS Year, 
     DatePart("ww",[Report]![Production date]-1) AS Week, 
     Month(Report![Production date]) AS Month 

    FROM Report 
    ) tmp 

Вопрос 2:

SELECT 
    Report.*  -- all rows from table Report 
-- ,Quantity.*  -- all rows from table Quantity 
-- ,Timeplan*  -- all rows from table Timeplan 

    ,CalcValue = Report.[Number of Workers] * Timeplan.[Production Time] 

FROM Report 
INNER JOIN Quantity ON Quantity.ID = Report.ID 
INNER JOIN Timeplan ON TimePlan.[Material No] = Quantity.[Material No] 

Удалить й --, если вам нужно, чтобы увидеть столбцы из Quantity или Timeplan таблиц. В таблице отчетов отображаются только строки, которые соответствуют таблице количества и таблице времени.

EDIT Оба вопроса объединены.

SELECT *, 
    TotalSum = (TotalInterruptDuration + TotalReworkDuration + TotalOvertimeDuration) 
FROM (
    SELECT 
     Report.ID, 
     Report.[Creation date], 
     Report.[Production date], 
     Report.[Production place], 
     Report.[Shift], 
     Report.[Responsible], 
     Report.[Number of workers], 

     (SELECT Sum(Interrupts.[Interrupt duration]) 
     FROM Interrupts 
     WHERE Interrupts.ID=Report.ID) AS TotalInterruptDuration, 

     (SELECT Sum([Rework].[ Rework duration]) 
     FROM [Rework] 
     WHERE [Rework].ID=Report.ID) AS TotalReworkDuration, 

     (SELECT Sum(Overtime.[Overtime duration]) 
     FROM Overtime 
     WHERE Overtime.ID=Report.ID) AS TotalOvertimeDuration, 

     Year([Report]![Production date]) AS Year, 
     DatePart("ww",[Report]![Production date]-1) AS Week, 
     Month(Report![Production date]) AS Month, 

     Report.[Number of Workers] * Timeplan.[Production Time] AS CalcValue 
    FROM 
     (Report 
     INNER JOIN Quantity 
     ON Quantity.ID = Report.ID) 
     INNER JOIN Timeplan 
     ON TimePlan.[Material No] = Quantity.[Material No] 
    ) tmp 

EDIT обновил join для доступа. Обратите внимание, что условия доступа к соединению: Multiple INNER JOIN SQL ACCESS

+0

Я хочу добавить запрос к моему запросу. Как я могу это сделать? –

+0

Запрос 1 или запрос 2? – Hockenberry

+0

i означает объединение запросов1 и двух вместе –

Смежные вопросы