2012-07-23 79 views
0

我以前問過如何通過MYSQL連接多個表,但現在我遇到了一個新問題。mysql innerjoin和union

說我有這幾個表。通過晶體報告

報銷表

-Name---Check Number-----Date------Reimbursement-- 
-John-----1--------------7/23/12-------$100------- 
-Joe------2--------------7/23/12-------$102------- 
-Jane-----3--------------7/23/12-------$103------- 
-Jill-----4--------------7/23/12-------$104------- 

原始權利要求

-Name---Check Number-----Date---------Amount-- 
-John-----1--------------7/23/12-------$100--- 
-Joe------2--------------7/23/12-------$102--- 
-Jane-----3--------------7/23/12-------$103--- 
-Jill-----4--------------7/23/12-------$100--- 

調整權利要求

-Name---Check Number-----Date---------Amount-- 
-Jill-----4--------------7/23/12-------$4----- 

最終結果應當是

-Name---Check #---Claim Type----Date Paid----Amount----Reimbursement-- 
-John-----1-------Original--------7/23/12-----$100-------$100--------- 
-Joe------2-------Original--------7/23/12-----$102-------$102--------- 
-Jane-----3-------Original--------7/23/12-----$103-------$103--------- 
-Jill-----4-------Original-------7/23/12------$100-------$104--------- 
-Jill-----4-------Adjusted-------7/23/12------$4---------------------- 

-Name---Check #---Claim Type----Date Paid----Amount----Reimbursement-- 
-John-----1-------Original--------7/23/12-----$100-------$100--------- 
-Joe------2-------Original--------7/23/12-----$102-------$102--------- 
-Jane-----3-------Original--------7/23/12-----$103-------$103--------- 
-Jill-----4-------Original-------7/23/12------$100-------$104--------- 
-Jill-----4-------Adjusted-------7/23/12------$4---------$104--------- 

我目前的腳本是:

Select mt.`Check Number` as `Check Number`, 
     mt.`Payment Date` as `Payment Date`, 
     mt.`Payment Type` as `Payment Type`, 
     c1.`Facility Name` as `Facility Name`, 
     'Adjustment June 2012' as `Claim Type`, 
     c1.`Amount` as Amount, 
     mt.Reimbursement as Reimbursement 
    From Reimbursement mt 
       Inner Join ClaimAdjust_6_2012 c1 
        on c1.`Check Number` = mt.`Check Number` and 
        mt.`Payment Date` = c1.`Payment Date` 
    Where mt.`Payment Date`>='2012-7-1' And 
     mt.`Payment Date`<'2012-8-1' 

Union 

Select mt.`Check Number` as `Check Number`, 
     mt.`Payment Date` as `Payment Date`, 
     mt.`Payment Type` as `Payment Type`, 
     c1.`Facility Name` as `Facility Name`, 
     'Original June 2012' as `Claim Type`, 
     c1.`Amount` as Amount, 
     mt.Reimbursement as Reimbursement 
From Reimbursement mt 
       Inner Join Claim_6_2012 c1 
        on c1.`Check Number` = mt.`Check Number` and 
         mt.`Payment Date` = c1.`Payment Date` 
Where mt.`Payment Date`>='2012-7-1' And 
     mt.`Payment Date`<'2012-8-1' 
+1

有什麼問題嗎? – RedFilter 2012-07-23 16:06:08

+0

如何在Crystal報表上創建最終結果,而不必爲相同支票號碼兩次報銷 – user1489261 2012-07-23 16:07:53

回答

1

此查詢是否有效?你爲什麼不只能加入的Reimbursement TableOriginal Claim和UNION它Adjusted Claim

SELECT  a.Name, a.CheckNumber, a.`Date`, 
      b.Amount, a.Reimbursement 
FROM  Reimbursement a INNER JOIN 
       OrginalClaim b ON 
        a.Name = b.Name AND 
        a.CheckNmber = b.CheckNumber AND 
        a.`Date` = b.`Date` 
UNION 
SELECT  Name, CheckNumber, `Date`, Amount, NULL as Reimbursement 
FROM  AdjustedClaim 
+0

+1爲您主人 – 2012-07-24 03:57:42

+0

AdjustedClaim有時需要報銷。 – user1489261 2012-07-24 13:30:18

+0

腳本的一部分幫助我完成目標。謝謝 – user1489261 2012-08-15 20:07:01

0

我認爲答案是非常簡單的。不理會在第一子查詢報銷:

Select mt.`Check Number` as `Check Number`,mt.`Payment Date` as `Payment Date`,mt.`Payment Type` as `Payment Type`,c1.`Facility Name` as `Facility Name`,'Adjustment June 2012' as `Claim Type`,c1.`Amount` as Amount, NULL as Reimbursement 
From Reimbursement mt Inner Join 
    ClaimAdjust_6_2012 c1 
    on c1.`Check Number` = mt.`Check Number` and mt.`Payment Date` = c1.`Payment Date` 
Where mt.`Payment Date`>='2012-7-1' And mt.`Payment Date`<'2012-8-1' 
Union all 
Select mt.`Check Number` as `Check Number`,mt.`Payment Date` as `Payment Date`,mt.`Payment Type` as `Payment Type`,c1.`Facility Name` as `Facility Name`,'Original June 2012' as `Claim Type`,c1.`Amount` as Amount,mt.Reimbursement as Reimbursement 
From Reimbursement mt Inner Join 
    Claim_6_2012 c1 
    on c1.`Check Number` = mt.`Check Number` and mt.`Payment Date` = c1.`Payment Date` 
Where mt.`Payment Date`>='2012-7-1' And mt.`Payment Date`<'2012-8-1' 

此連接的表,所以你仍然可以使用支付日期,但設置爲NULL值。

+0

我無法將AdjustedClaim與Null值一起報銷,唯一應該爲null的時間是AdjustedClaim和OriginalClaim共享相同的「支票號碼」和「支付日期」,如果它不是,那麼它應該有自己的關係報銷 – user1489261 2012-07-24 13:33:21

+0

此查詢是根據您的原始數據。你能否在問題中提供一個例子來澄清你真正需要的東西? – 2012-07-24 13:44:31