2017-09-14 4 views
1

私は2つの異なるカウントを返すこのステートメントを持っており、私はその月についてこれらのカウントに参加しようとしています。以下は現在の私の声明です。問題は2番目のテーブルのSTRAFTとしてCOUNT(SecondColl。*)です。このようなことをすることはできますか?sql join counts

WITH cte as(
    SELECT * FROM K1 
    UNION ALL 
    SELECT * FROM K2 
    UNION ALL 
    SELECT * FROM K3 
    UNION ALL 
    SELECT * FROM K4 
), FirstColl as (SELECT * FROM (Select DP, RN, ET, ED, DT, COUNT(*)OVER(PARTITION BY DP, RN) AS your_count 
      from cte) a WHERE your_count = 1 and ET = 'Complete' and DT = 'STR' 
), SecondColl as (SELECT * FROM (Select DP, RN, ET, ED, DT, COUNT(*)OVER(PARTITION BY DP, RN) AS your_count 
      from cte) a WHERE your_count = 1 and ET = 'Complete' and DT = 'NCD' 
) 
SELECT MONTH(ED) as STRMnth, COUNT(*) as STRRFT , COUNT(SecondColl.*) as STRAFT 
FROM FirstColl 
inner join SecondColl where MONTH(ED) = SecondColl.MONTH(ED) 
group by MONTH(ED) 
order by STRMnth asc 
+0

いくつかのサンプルテーブル(DAT)を追加します。 aと期待される結果をフォーマットされたテキストとして出力します。 (画像がありません) – jarlh

答えて

0

これを試してみてください:

WITH cte as(
    SELECT * FROM K1 
    UNION ALL 
    SELECT * FROM K2 
    UNION ALL 
    SELECT * FROM K3 
    UNION ALL 
    SELECT * FROM K4 
), FirstColl as (SELECT * FROM (Select DP, RN, ET, ED, DT, COUNT(*)OVER(PARTITION BY DP, RN) AS your_count 
      from cte) a WHERE your_count = 1 and ET = 'Complete' and DT = 'STR' 
), SecondColl as (SELECT * FROM (Select DP, RN, ET, ED, DT, COUNT(*)OVER(PARTITION BY DP, RN) AS your_count 
      from cte) a WHERE your_count = 1 and ET = 'Complete' and DT = 'NCD' 
) 
select 
    a.STRMnth, a.cnt1 as STRRFT, b.cnt2 as STRAFT 
from 
    (select month(ED) as STRMnth, count(*) as cnt1 from FirstColl group by month(ED)) a 
    left join 
    (select month(ED) as STRMnth, count(*) as cnt2 from SecondColl group by month(ED)) b 
     on a.STRMnth = b.STRMnth 
order by a.STRMnth asc 

UPDATE1:

WITH cte as(
     SELECT * FROM K1 
     UNION ALL 
     SELECT * FROM K2 
     UNION ALL 
     SELECT * FROM K3 
     UNION ALL 
     SELECT * FROM K4 
    ), FirstColl as (SELECT * FROM (Select DP, RN, ET, ED, DT, COUNT(*)OVER(PARTITION BY DP, RN) AS your_count 
       from cte) a WHERE your_count = 1 and ET = 'Complete' and DT = 'STR' 
    ), SecondColl as (SELECT * FROM (Select DP, RN, ET, ED, DT, COUNT(*)OVER(PARTITION BY DP, RN) AS your_count 
       from cte) a WHERE your_count = 1 and ET = 'Complete' and DT = 'NCD' 
    ), ThirdColl as (SELECT Distinct ED, DP, RN FROM cte WHERE DT = 'STR') 
    select 
     a.STRMnth, a.cnt1 as STRRFT, b.cnt2 as STRAFT 
    from 
     (select month(ED) as STRMnth, count(*) as cnt1 from FirstColl group by month(ED)) a 
     left join 
     (select month(ED) as STRMnth, count(*) as cnt2 from SecondColl group by month(ED)) b 
      on a.STRMnth = b.STRMnth 
     left join 
     (select month(ED) as STRMnth, count(*) as cnt3 from ThirdColl group by month(ED)) c 
      on a.STRMnth = c.STRMnth 
    order by a.STRMnth asc 

アップデート2:

WITH cte as(
     SELECT * FROM K1 
     UNION ALL 
     SELECT * FROM K2 
     UNION ALL 
     SELECT * FROM K3 
     UNION ALL 
     SELECT * FROM K4 
    ), FirstColl as (SELECT * FROM (Select DP, RN, ET, ED, DT, COUNT(*)OVER(PARTITION BY DP, RN) AS your_count 
       from cte) a WHERE your_count = 1 and ET = 'Complete' and DT = 'STR' 
    ), SecondColl as (SELECT * FROM (Select DP, RN, ET, ED, DT, COUNT(*)OVER(PARTITION BY DP, RN) AS your_count 
       from cte) a WHERE your_count = 1 and ET = 'Complete' and DT = 'NCD' 
    ), ThirdColl as (SELECT distinct ED, DP, RN FROM K1 WHERE Defect_Type = 'STR') 
    select 
     a.STRMnth, a.cnt1 as STRRFT, b.cnt2 as STRAFT 
    from 
     (select month(ED) as STRMnth, count(*) as cnt1 from FirstColl group by month(ED)) a 
     left join 
     (select month(ED) as STRMnth, count(*) as cnt2 from SecondColl group by month(ED)) b 
      on a.STRMnth = b.STRMnth 
     left join 
     (select month(ED) as STRMnth, count(*) as cnt3 from ThirdColl group by month(ED)) c 
      on a.STRMnth = c.STRMnth 
    order by a.STRMnth asc 
+1

EDがagg関数にないため、このエラーが発生します – Ryan

+0

申し訳ありませんが、アップデートを確認してください。 –

+0

Select Distinctでこのステートメントに追加の列を追加しようとしていますが、これで正しい方向に向けることができますか?これは私がSTRTotalCollを(SELECT Distinct DP、RN FROM cte WHERE DT = 'STR' ) – Ryan