2016-06-29 6 views
-1

Ich möchte einen inneren Join in meiner Abfrage machen, aber ich weiß nicht, wie ich meine zwei Select-Anweisungen in einer Abfrage zusammenfassen kann.Beitritt Select-Anweisungen?

Dies ist die erste Abfrage:

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 

Ausgabe: enter image description here und meine zweite Abfrage:

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 

Ausgang: enter image description here

versuchte ich es in meiner Anfrage hinzufügen zwei Select-Anweisungen. Aber wenn ich das tue, ist die Ausgabe falsch. Ich weiß wirklich nicht, wie ich mich diesen zwei Fragen anschließen sollte.

Ich möchte dann diese Berechnung tun: Distribution * (1 - Value)

Distribution von der ersten Abfrage und Value von der zweiten Abfrage

+1

Wir wissen noch weniger, was Sie wollen ... Desc ribe Ausgabe von aktuellen Abfragen und das erwartete kombinierte Ergebnis. – jarlh

+0

@jarlh: Ich habe meine Frage bearbeitet –

+0

Hat Ihre zweite Abfrage nur eine Zeile zurückgegeben – StackUser

Antwort

1

ich den ersten und zweiten Ergebnissatz übernehmen muss, basierend auf A.Machine verbunden werden = B.Name

wie diese versuchen,

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

Vielen Dank für Ihre Hilfe. Ich habe das gleiche gemacht, aber in der Ausgabe gibt es kein Ergebnis. Das Ergebnis ist leer –

+0

Ich habe einen 'LEFT JOIN' verwendet, jetzt zeigt es mir die Ergebnisse der ersten SELECT-Anweisung, aber nicht von der zweiten SELECT-Anweisung. Was kann ich tun, um die Ausgabe der zweiten Anweisung zu erhalten? –

+1

Bitte überprüfen Sie die A.Machine = B.NAME Werte der ersten und zweiten Auswahl und stellen Sie sicher, dass mindestens ein bestimmter Wert in beiden vorhanden ist – StackUser