0

サブクエリを使用して、メインクエリで使用されていないテーブルからいくつかの結果を計算する SQL クエリがあります。個々の結果 (2.1 と 2.2) の結果が 2 行に表示されるという問題があるため、2.1 の結果が表示され、2.2 は 1 行で 0 になり、その逆も同様です。以下の期待される結果のようになりたいです。

    SELECT DISTINCT

    DATEPART(week, SS.timearrived) 
        AS [Week No],

    SS.timearrived
        AS [Date],

    RTRIM(SS.vname)
        AS [V Name],    

    SS.vyid
        AS [Vy ID],

    ((SELECT CASE WHEN
                 (select COUNT(*)
    FROM  IME 
    WHERE IME.topos = SS.visid  and XCHE.sname IN ('2.1','2.2')
                      AND movek != 'Y' AND movek != 'S'
    GROUP BY IME.topos) IS NULL
    THEN '0'
    else (select COUNT(*)
    FROM  IME 
    WHERE IME.topos = SS.visid  and XCHE.sname IN ('2.1','2.2')
                      AND movek != 'Y' AND movek != 'S'
    GROUP BY IME.topos)
    END )

     + (SELECT CASE WHEN
                 (select COUNT(*)
    FROM  IME 
    WHERE IME.fmpos = SS.visid  and XCHE.sname IN ('2.1','2.2')
    GROUP BY IME.fmpos) IS NULL
    THEN '0'
    else (select COUNT(*)
    FROM  IME 
    WHERE IME.fmpos = SS.visid and XCHE.sname IN ('2.1','2.2')
    GROUP BY IME.fmpos)
    END)
    )/(
    convert(float,datediff(mi, swork, ework))/60 )

        AS [GBP T2],

    ((SELECT CASE WHEN
                 (select COUNT(*)
    FROM  IME 
    WHERE IME.topos = SS.visid  and XCHE.sname IN ('2.1')
                      AND movek != 'Y' AND movek != 'S'
    GROUP BY IME.topos) IS NULL
    THEN '0'
    else (select COUNT(*)
    FROM  IME 
    WHERE IME.topos = SS.visid  and XCHE.sname IN ('2.1')
                      AND movek != 'Y' AND movek != 'S'
    GROUP BY IME.topos)
    END )

     + (SELECT CASE WHEN
                 (select COUNT(*)
    FROM  IME 
    WHERE IME.fmpos = SS.visid  and XCHE.sname IN ('2.1')
    GROUP BY IME.fmpos) IS NULL
    THEN '0'
    else (select COUNT(*)
    FROM  IME 
    WHERE IME.fmpos = SS.visid and XCHE.sname IN ('2.1')
    GROUP BY IME.fmpos)
    END)
    )/(
    convert(float,datediff(mi, swork, ework))/60 )

        AS [GCP 2.1],

    ((SELECT CASE WHEN
                 (select COUNT(*)
    FROM  IME 
    WHERE IME.topos = SS.visid  and XCHE.sname IN ('2.2')
                      AND movek != 'Y' AND movek != 'S'
    GROUP BY IME.topos) IS NULL
    THEN '0'
    else (select COUNT(*)
    FROM  IME 
    WHERE IME.topos = SS.visid  and XCHE.sname IN ('2.2')
                      AND movek != 'Y' AND movek != 'S'
    GROUP BY IME.topos)
    END )

     + (SELECT CASE WHEN
                 (select COUNT(*)
    FROM  IME 
    WHERE IME.fmpos = SS.visid  and XCHE.sname IN ('2.2')
    GROUP BY IME.fmpos) IS NULL
    THEN '0'
    else (select COUNT(*)
    FROM  IME 
    WHERE IME.fmpos = SS.visid and XCHE.sname IN ('2.2')
    GROUP BY IME.fmpos)
    END)
    )/(
    convert(float,datediff(mi, swork, ework))/60 )

        AS [GCP 2.2]

    FROM    SS
    LEFT OUTER JOIN VCME ON SS.visid = vgk 
    LEFT OUTER JOIN VVVD ON SS.visid = fs01
    LEFT OUTER JOIN VCS ON VVVD.vvdgk = VCS.vvdgk
    LEFT OUTER JOIN VCSD ON VCS.gk = VCSD.csgk
    INNER JOIN XCHE on VCS.cgk = XCHE.gk

現在の結果

    Week No     Date                        V Name      Vy ID       GBP T2      GCP 2.1     GCP 2.2
    14          2013-03-31 00:01:00.000     FORD        30580       18.72       0           18.72
    14          2013-03-31 00:01:00.000     FORD        30580       18.72       18.72       0

予想された結果

    Week No     Date                        V Name      Vy ID       GBP T2      GCP 2.1     GCP 2.2
    14          2013-03-31 00:01:00.000     FORD        30580       18.72       18.72       18.72
4

1 に答える 1