2016-06-29 2 views
-1

Я хотел бы сделать внутреннее соединение в моем запросе, но я не знаю, как суммировать два оператора select в одном запросе.присоединение к операторам выбора?

Это первый запрос:

select 
      Machine 
     , EventDefinition 
     , Duration 
     , sum(Duration) over (partition by 1) As Total 
     , Duration/sum(Duration) over (partition by 1)*100 AS Distribution 
     ,case when EventCategory < 0.05 Then 'NOT INCL' ELSE 'OK' END AS Under3Min 

    from (

      Select 
    SystemName AS Machine 
    , EventDefinition 
    , EventDate 
    , EventStartDateTime 
    , IsNull(EventEndDateTime, GETDATE()) as EventEndDateTime 
    , Sum(cast(EventEndDateTime - EventStartDateTime as float))*24 as Duration 
    ,Sum(case when CustomEvent = 'without Stop' then cast(EventEndDateTime - EventStartDateTime as float)*24 else 0 end) as EventCategory 
     FROM tDataCategory     
     WHERE EventDate >= @StartDateTime 
     AND EventDate <= @EndDateTime 
     AND SystemName = '201' 
Group BY SystemName, eventdefinition, eventstartdatetime, eventenddatetime, EventDefinition, EventDate, CustomEvent 
    ) as t 
    WHERE CustomEvent <> 'without Stop' 
     OR (CustomEvent = 'without Stop' AND t.EventCategory >=0.05) 

    group by EventDefinition 
      , Duration 
     ,Machine 
     ,EventCategory 

выход: enter image description here и мой второй запрос:

SELECT DataValue = case when Prod = 0 then 0 else ISNULL(100.0/Prod * Scrap, 0) end, 
    Value = GoodUnits/TheoreticalUnits *100, 
     FROM (
     Select intervaldate as DateValue, intervalDateWeek as Datum, tsystem.Name as Name, ProductName as Product, teamname as Team, 
    SUM(case when IssueName in ('A1', 'A2') then calculationUnitsInitial else 0 end) as Scrap, 
    Sum(case when IssueName = 'Prod' then calculationUnitsInitial else 0 end) as Prod, 
    SUM(GoodUnits) 

As GoodUnits, 
SUM(TheoreticalUnits) As TheoreticalUnits, 

from tCount inner join tsystem ON tCount.systemid = tsystem.id 
    where IntervalDate >= dateadd(wk, datediff(wk, 1, getdate()), 0) 
and IntervalDate <= dateadd(wk, datediff(wk, 0, getdate()), 0) 
AND ((DATEPART(dw, IntervalDate) + @@DATEFIRST) % 7) NOT IN (0,1) 
    and tsystem.Name = '201' 

    group by intervaldate, tsystem.Name, intervaldateweek, ProductName, teamname 
    ) as s 

выход: enter image description here

Я попробовал добавить в мой запрос два оператора выбора. Но если я это сделаю, результат ошибочен. Я действительно не знаю, как я должен присоединиться к этим двум запросам.

Я хотел бы сделать то этот расчет: Distribution * (1 - Value)

Distribution из первого запроса и Value из второго запроса

+1

Мы знаем еще меньше, что вы хотите ... Описание изделия ребра, выводимые из текущих запросов, и ожидаемый комбинированный результат. – jarlh

+0

@jarlh: Я отредактировал мой вопрос –

+0

Ваш второй запрос возвращает только одну строку – StackUser

ответ

1

я предполагаю, первый и второй набор результатов должен быть соединен на основе A.Machine = B.Name

Попробуйте, как это,

SELECT A.Distribution * (1 - B.Value) 
FROM (
    SELECT Machine 
     ,EventDefinition 
     ,Duration 
     ,sum(Duration) OVER (PARTITION BY 1) AS Total 
     ,Duration/sum(Duration) OVER (PARTITION BY 1) * 100 AS Distribution 
     ,CASE 
      WHEN EventCategory < 0.05 
       THEN 'NOT INCL' 
      ELSE 'OK' 
      END AS Under3Min 
    FROM (
     SELECT SystemName AS Machine 
      ,EventDefinition 
      ,EventDate 
      ,EventStartDateTime 
      ,IsNull(EventEndDateTime, GETDATE()) AS EventEndDateTime 
      ,Sum(cast(EventEndDateTime - EventStartDateTime AS FLOAT)) * 24 AS Duration 
      ,Sum(CASE 
        WHEN CustomEvent = 'without Stop' 
         THEN cast(EventEndDateTime - EventStartDateTime AS FLOAT) * 24 
        ELSE 0 
        END) AS EventCategory 
     FROM tDataCategory 
     WHERE EventDate >= @StartDateTime 
      AND EventDate <= @EndDateTime 
      AND SystemName = '201' 
     GROUP BY SystemName 
      ,eventdefinition 
      ,eventstartdatetime 
      ,eventenddatetime 
      ,EventDefinition 
      ,EventDate 
      ,CustomEvent 
     ) AS t 
    WHERE CustomEvent <> 'without Stop' 
     OR (
      CustomEvent = 'without Stop' 
      AND t.EventCategory >= 0.05 
      ) 
    GROUP BY EventDefinition 
     ,Duration 
     ,Machine 
     ,EventCategory 
    ) A 
INNER JOIN (
    SELECT DataValue = CASE 
      WHEN Prod = 0 
       THEN 0 
      ELSE ISNULL(100.0/Prod * Scrap, 0) 
      END 
     ,Value = GoodUnits/TheoreticalUnits * 100 
     ,NAME 
    FROM (
     SELECT intervaldate AS DateValue 
      ,intervalDateWeek AS Datum 
      ,tsystem.NAME AS NAME 
      ,ProductName AS Product 
      ,teamname AS Team 
      ,SUM(CASE 
        WHEN IssueName IN (
          'A1' 
          ,'A2' 
          ) 
         THEN calculationUnitsInitial 
        ELSE 0 
        END) AS Scrap 
      ,Sum(CASE 
        WHEN IssueName = 'Prod' 
         THEN calculationUnitsInitial 
        ELSE 0 
        END) AS Prod 
      ,SUM(GoodUnits) AS GoodUnits 
      ,SUM(TheoreticalUnits) AS TheoreticalUnits 
      , 
     FROM tCount 
     INNER JOIN tsystem ON tCount.systemid = tsystem.id 
     WHERE IntervalDate >= dateadd(wk, datediff(wk, 1, getdate()), 0) 
      AND IntervalDate <= dateadd(wk, datediff(wk, 0, getdate()), 0) 
      AND ((DATEPART(dw, IntervalDate) + @@DATEFIRST) % 7) NOT IN (
       0 
       ,1 
       ) 
      AND tsystem.NAME = '201' 
     GROUP BY intervaldate 
      ,tsystem.NAME 
      ,intervaldateweek 
      ,ProductName 
      ,teamname 
     ) AS s 
    ) B ON A.Machine = B.NAME 
+0

Благодарим за помощь. Я сделал то же самое, но на выходе результата нет. Результат пуст –

+0

Я использовал 'LEFT JOIN', теперь он показывает мне результаты первого select Statement, но не из второго оператора select. Что я могу сделать, чтобы получить результат из второго оператора? –

+1

Пожалуйста, проверьте значения A.Machine = B.NAME для выбора первого и второго и убедитесь, что по крайней мере определенное значение существует в обоих вариантах выбора – StackUser

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