サブクエリを使用して、メインクエリで使用されていないテーブルからいくつかの結果を計算する 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