0
私はすべての顧客が3つの会社を持っていると言います。私は、解雇された顧客の3社すべてを検索し、それらの顧客のステータスにかかわらず、その顧客が顧客であるすべての企業を返すコードを書く必要があります。結果が1 dbのパラメータと一致する場合の3 dbsからのクエリ結果の取得
私が持っている最高のコードは次のとおりです。
SELECT
x.name,
x.social,
CASE
when (SUM(x.company) = 1) then ('A')
when (SUM(x.company) = 2) then ('B')
when (SUM(x.company) = 4) then ('C')
when (SUM(x.company) = 3) then ('A + B')
when (SUM(x.company) = 5) then ('A + C')
when (SUM(x.company) = 6) then ('B + C')
when (SUM(x.company) = 7) then ('X')
else NULL end AS company
FROM
(SELECT
a.name as name,
a.socsec,
("1") AS company
FROM
a
WHERE
(a.status = 'Active') AND
((a.trans IN ('Payroll','HR')) AND
(a.result IN ('Terminated','LaidOff'))
GROUP BY
a.socsec
UNION
SELECT
b.name as name,
b.socsec,
("2") AS company
FROM
b
WHERE
(b.status = 'Active') AND
((b.trans IN ('Payroll','HR')) AND
(b.result IN ('Terminated','LaidOff'))
GROUP BY
b.socsec
UNION
SELECT
c.name as name,
c.socsec,
("4") AS company
FROM
c
WHERE
(c.status = 'Active') AND
((c.trans IN ('Payroll','HR')) AND
(c.result IN ('Terminated','LaidOff'))
GROUP BY
c.socsec) idx
GROUP BY
x.socsec
ORDER BY
company
だけ私はBでA社での終了コードが、通常のアカウントと顧客を持っているので、もし、終了フィルタを満たし、顧客の口座を返します。このコードは、その顧客のアカウントにAとBを返すようにしています。お客様のアカウントのいずれかがフィルタを満たしている限り、お客様がアカウントを持っているすべての企業に返す必要があります。 。
私が考えることができる最も良い解決策は、3つの企業の間のすべてのアカウントを結合し、UNION外のORステートメントにフィルタを適用することでしたが、動作させるには時間がかかります。
どのような考えですか?
これは確かに実用的な解決策です –