0

SQLfiddleのURLを見つけてください。

http://sqlfiddle.com/#!2/c8002/1/0

実際の出力は次のようになります。

region_id   status1         branches        balance     fses
    status0         discount     branch_names       telecallers
2   NULL    4       400.00  30   KOTTAKKAL  341.00  3   3
2   NULL    4       800.00  31   KALPETTA   394.00  3   3

次のように繰り返し出力されます。

region_id   status1         branches        balance     fses
    status0         discount     branch_names       telecallers
2   NULL    4       400.00  30   KOTTAKKAL  341.00  3   3
2   NULL    4       400.00  30   KOTTAKKAL  394.00  3   3 
2   NULL    4       800.00  31   KALPETTA   341.00  3   3
2   NULL    4       800.00  31   KALPETTA   394.00  3   3

同じものを修正するにはどうすればよいですか?

ありがとう&よろしく、マンジェッシュ。

4

3 に答える 3

0

これを試して ::

クエリに次の部分を追加するだけです。

GROUP BY branch_names

または、SELECT部分​​のDISTINCTを次のように取得できます。

Select DISTINCT(branch_names) from....

最終的なクエリは::になります

SELECT E.`region_id`,a0.status0,a1.status1,k.discount,k.branches
,k.branch_names,BAL.balance,TCLRS.telecallers,FSE.fses

FROM tbl_insurance_excel E


LEFT OUTER JOIN (Select E2.region_id, count(`id`) as status1
from tbl_insurance_excel E2 Left Join  tbl_recipt_general_details on id=insurance_excel_id
JOIN tbl_branches  on policy_closed_branch= branch_id
Where E2.`row_status` =1 AND E2.canceled_status='no' and E2.region_id=2   Group by region_id) a1 ON a1.region_id=E.region_id

LEFT OUTER JOIN (Select E2.region_id, count(`id`) as status0
from tbl_insurance_excel E2 Left Join  tbl_recipt_general_details on id=insurance_excel_id
JOIN tbl_branches  on policy_closed_branch= branch_id
Where E2.`row_status` =0 AND E2.canceled_status='no' and E2.region_id=2   Group by region_id) a0 ON a0.region_id=E.region_id

LEFT JOIN (
SELECT IEX.region_id,B.branch_name as branch_names,B.branch_id as branches, sum( DDT.discounts_amount ) as discount
FROM tbl_insurance_excel IEX
LEFT JOIN tbl_recipt_general_details RGD ON IEX.id = RGD.insurance_excel_id
LEFT JOIN tbl_discounts_details DDT ON RGD.rec_gene_id = DDT.recipt_general_id
LEFT JOIN tbl_branches B ON B.branch_id = RGD.policy_closed_branch
WHERE IEX.region_id =2
GROUP BY B.branch_id)k on k.region_id=E.region_id

LEFT JOIN (
SELECT IEX.region_id,B.branch_id as branches, sum( RGD.`recipt_bal_amount` ) AS balance
FROM tbl_insurance_excel IEX
LEFT JOIN tbl_recipt_general_details RGD ON IEX.id = RGD.insurance_excel_id
LEFT JOIN tbl_branches B ON B.branch_id = RGD.policy_closed_branch
WHERE IEX.region_id =2
GROUP BY B.branch_id)BAL ON BAL.region_id=E.region_id

LEFT JOIN (
SELECT ex.region_id, B.branch_id AS branches, count( F.`fse_id` ) AS telecallers
FROM tbl_branches B
LEFT JOIN tbl_team_leader L ON B.branch_id = L.leader_branch_id
LEFT JOIN tbl_fse F ON L.leader_id = F.leader_id
JOIN (

SELECT region_id
FROM tbl_insurance_excel
WHERE `region_id` =2
GROUP BY region_id
) AS ex ON B.region_id = ex.region_id
WHERE F.fse_category = 'Telecaller'
GROUP BY B.branch_id
) TCLRS ON  TCLRS .region_id=E.region_id


LEFT JOIN (
SELECT ex.region_id, B.branch_id AS branches, count( F.`fse_id` ) AS fses
FROM tbl_branches B
LEFT JOIN tbl_team_leader L ON B.branch_id = L.leader_branch_id
LEFT JOIN tbl_fse F ON L.leader_id = F.leader_id
JOIN (

SELECT region_id
FROM tbl_insurance_excel
WHERE `region_id` =2
GROUP BY region_id
) AS ex ON B.region_id = ex.region_id
WHERE F.fse_category = 'Fse'
GROUP BY B.branch_id
) FSE ON  FSE.region_id=E.region_id



 where E.region_id=2 group by  k.branches
于 2012-11-25T12:24:11.780 に答える
0

クエリを別のselectでラップし、BRANCH_NAMESでグループ化しようとしましたか

SELECT * FROM
(
    << your query goes here>>
) o
GROUP BY o.BRANCH_NAMES

しかし、このように結果をまとめると、バランス列のデータが確実に失われます。

于 2012-11-25T12:33:13.420 に答える
0

クエリ構造自体に問題があると思います。これは単なるリクエストではないためdistinctです。

テーブルを結合し、行ごとに個別の値を取得します。実際には、とのそれぞれに対して1つだけになりたいと考えていましKOTTAKKALKALPETTA

あなたの例では、句の追加distinctは実行されますが、行が異なるため、違いは生じないことに注意してください。列のバランスには、との両方が341.00あり、と394.00のエントリごとにKOTTAKKALありKALPETTAます。

groupを使用している場合、はい、の情報は失われます。これは、aがグループ化されたさまざまな要素の最初のものにすぎないbalanceために返される結果group byです(複数の値を持つ列の場合)。

必要な結果を決定するか、列に対して他の合計を計算することに対処する必要がありますbalance

私は結果を推測します、そしてあなたがしたいと思っていた適切な参加はこれです:

SELECT DISTINCT E.`region_id`,a0.status0,a1.status1,k.discount,k.branches
,k.branch_names, k.balance,TCLRS.telecallers,FSE.fses

FROM tbl_insurance_excel E


LEFT OUTER JOIN (SELECT E2.region_id, count(`id`) AS status1
FROM tbl_insurance_excel E2 LEFT JOIN  tbl_recipt_general_details ON id=insurance_excel_id
JOIN tbl_branches  ON policy_closed_branch= branch_id
WHERE E2.`row_status` =1 AND E2.canceled_status='no' AND E2.region_id=2   GROUP BY region_id) a1 ON a1.region_id=E.region_id

LEFT OUTER JOIN (SELECT E2.region_id, count(`id`) AS status0
FROM tbl_insurance_excel E2 LEFT JOIN  tbl_recipt_general_details ON id=insurance_excel_id
JOIN tbl_branches  ON policy_closed_branch= branch_id
WHERE E2.`row_status` =0 AND E2.canceled_status='no' AND E2.region_id=2   GROUP BY region_id) a0 ON a0.region_id=E.region_id

LEFT JOIN (
SELECT IEX.region_id, B.branch_name AS branch_names, B.branch_id AS branches, sum( DDT.discounts_amount ) AS discount, sum( RGD.`recipt_bal_amount` ) AS balance
FROM tbl_insurance_excel IEX
LEFT JOIN tbl_recipt_general_details RGD ON IEX.id = RGD.insurance_excel_id
LEFT JOIN tbl_discounts_details DDT ON RGD.rec_gene_id = DDT.recipt_general_id
LEFT JOIN tbl_branches B ON B.branch_id = RGD.policy_closed_branch
WHERE IEX.region_id =2
GROUP BY B.branch_id)k ON k.region_id=E.region_id

LEFT JOIN (
SELECT ex.region_id, B.branch_id AS branches, count( F.`fse_id` ) AS telecallers
FROM tbl_branches B
LEFT JOIN tbl_team_leader L ON B.branch_id = L.leader_branch_id
LEFT JOIN tbl_fse F ON L.leader_id = F.leader_id
JOIN (

SELECT region_id
FROM tbl_insurance_excel
WHERE `region_id` =2
GROUP BY region_id
) AS ex ON B.region_id = ex.region_id
WHERE F.fse_category = 'Telecaller'
GROUP BY B.branch_id
) TCLRS ON  TCLRS .region_id=E.region_id


LEFT JOIN (
SELECT ex.region_id, B.branch_id AS branches, count( F.`fse_id` ) AS fses
FROM tbl_branches B
LEFT JOIN tbl_team_leader L ON B.branch_id = L.leader_branch_id
LEFT JOIN tbl_fse F ON L.leader_id = F.leader_id
JOIN (

SELECT region_id
FROM tbl_insurance_excel
WHERE `region_id` =2
GROUP BY region_id
) AS ex ON B.region_id = ex.region_id
WHERE F.fse_category = 'Fse'
GROUP BY B.branch_id
) FSE ON  FSE.region_id=E.region_id


  WHERE E.region_id=2 GROUP BY  k.branches

次々に結合を実行し、クエリで一意であるはずの結果を結合していることに注意してください。名前を付けたクエリのデータを結合してから、名前を付けkたクエリと結果を結合しましBALた。列を除いbalanceて、同じエントリが含まれているため、branch_id'sが複製されていました。

あなたはすぐに持っていました:

k.branch_id LEFT JOIN BAL.branch_id

これにより、行が異なるbalance値で複製されました。

投稿されたクエリで得られた結果は次のとおりです。

REGION_ID   STATUS0 STATUS1 DISCOUNT    BRANCHES    BRANCH_NAMES    BALANCE TELECALLERS FSES
2   (null)  4   400 30  KOTTAKKAL   341 3   3
2   (null)  4   800 31  KALPETTA    394 3   3

よろしく!

于 2012-11-25T14:09:53.813 に答える