2016-06-29 4 views
-1

私のクエリで内部結合をしたいのですが、2つのselect文を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 と私の2番目のクエリ:

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

私はそれが私のクエリに追加しようとしました2つの選択ステートメント。しかし、私がこれを行うと、出力が間違っています。私はこの2つの質問にどうやって参加すればいいのか分かりません。

Iは、この計算を行うたい:Iは、第1および第2の結果セットがA.Machineに基づいて参加しなければならないと仮定2のクエリ

+1

をお試しください現在のクエリーからのribe出力、および予想される結合結果。 – jarlh

+0

@jarlh:私の質問を編集しました –

+0

2番目のクエリで1行だけが返されました – StackUser

答えて

1

から最初のクエリからDistribution * (1 - Value)

DistributionValueを= B.Name

...私たちは、あなたが望むよりも少ないものを知って、このようにDESCを

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文の結果を表示しますが、2番目のselect文の結果は表示しません。 2番目のステートメントから出力を得るには何ができますか? –

+1

最初と2番目の選択のA.Machine = B.NAMEの値を確認してください。両方の選択に少なくとも特定の値が存在することを確認してください – StackUser

関連する問題