2017-09-22 51 views
0

我有2個表,並加入1個鍵。每桌上我只有一把鑰匙。如果可能,請幫助我獲得預期的結果。謝謝! 嗨,我有這個表,與主要SETTLE DT:SQL - 加入2代表與各1個關鍵,但要具體結果

SETTLE DT FUND  DEPTID  PGM  CLASS ACCT  PROJECT ID BUD REF FY  EMPLID  AMOUNT  AMOUNT1 AMOUNT ALL 
9/1/2017  21000 5066000 32000 12900 512001 304421850 072017 2017 000015034 1094.51 1094.51 1094.51 
9/15/2017 21000 5066000 32000 12900 512001 304421850 072017 2017 000015034 2189.01 2689.01 2689.01 
9/15/2017 21000 5066000 10001 11000 512001 500751850 072017 2017 000015034 500  2689.01 2689.01 

加入到這個表中,與重點檢查DT:

NAME   EMPLID  GROSS  BEN PLAN  EMPLYE SUR PAY END DT CHECK DT EMPLYR SUR NAME   SEC RUN ID 
Jones Rosie  000015034 250   SUR2 SURS 20  8/19/2017 9/15/2017 31.15 Jones Rosie  5 1719 
Jones Rosie  000015034 250   SUR2 SURS 20  9/2/2017  9/15/2017 31.15 Jones Rosie  5 1719 
Jones Rosie  000015034 1851.13  SUR2 SURS 148.09 9/2/2017  9/15/2017 230.65 Jones Rosie  5 1719 

此SQL返回此結果:

SELECT 
z.name 
,z.emplid 
,z.ssn 
,z.gross_amt   
,z.benefit_plan 
,z.z_employee_surs   
,z.pay_end_dt 
,z.check_date  
,ROUND(z_employer_surs,2) 
,x.fund_code 
,x.deptid 
,x.program_code 
,x.class_fld  
,x.account 
,x.project_id 
,x.budget_ref 
,x.amount     
,x.z_amount_all   
,ROUND((z.z_employer_surs * (x.amount/x.z_amount_all)),2) 
,z.name_display 
,z.z_campus 
,x.settlement_dt 
,z.RUN_ID 
FROM PS_Z_SURS_HR_WK z, 
    PS_Z_SURS_JRNL_WK x 
WHERE z.emplid = x.emplid 
AND z.emplid = '000015034' 
AND z.check_date = x.settlement_dt 
and x.project_id IN ('500751850', '304421850') 
AND x.budget_ref = '072017'; 

- 這是我得到

NAME   EMPLID  GROSS  BEN PL EMPLE SUR PAY END DT CHECK DT EMPLYR SUR FUND DEPTID  PRGM  CLASS ACCT  PROJECT 
Jones Rosie  000015034 1829.13 SUR2 146.33  8/19/2017 9/1/2017 227.91 21000 5066000 32000 12900 512001 304421850 
Jones Rosie  000015034 250  SUR2 20   8/19/2017 9/15/2017 31.15 21000 5066000 32000 12900 512001 304421850 
Jones Rosie  000015034 250  SUR2 20   9/2/2017  9/15/2017 31.15 21000 5066000 32000 12900 512001 304421850 
Jones Rosie  000015034 1851.13 SUR2 148.09  9/2/2017  9/15/2017 230.65 21000 5066000 32000 12900 512001 304421850 
Jones Rosie  000015034 250  SUR2 20   8/19/2017 9/15/2017 31.15 21000 5066000 10001 11000 512001 500751850 
Jones Rosie  000015034 250  SUR2 20   9/2/2017  9/15/2017 31.15 21000 5066000 10001 11000 512001 500751850 
Jones Rosie  000015034 1851.13 SUR2 148.09  9/2/2017  9/15/2017 230.65 21000 5066000 10001 11000 512001 500751850 

- 但這是我想要的

NAME   EMPLID  GROSS  BEN PL EMPLE SUR PAY END DT CHECK DT EMPLYR SUR FUND DEPTID  PRGM  CLASS ACCT  PROJECT 
Jones Rosie  000015034 1829.13 SUR2 146.33  8/19/2017 9/1/2017 227.91 21000 5066000 32000 12900 512001 304421850 
Jones Rosie  000015034 1851.13 SUR2 148.09  9/2/2017  9/15/2017 230.65 21000 5066000 32000 12900 512001 304421850 
Jones Rosie  000015034 250  SUR2 20   8/19/2017 9/15/2017 31.15 21000 5066000 10001 11000 512001 500751850 
Jones Rosie  000015034 250  SUR2 20   9/2/2017  9/15/2017 31.15 21000 5066000 10001 11000 512001 500751850 

謝謝!

回答

0

我認爲,僱員和日期是不是主鍵,所以當你加入,你得到的值的組合的兩個表。 你應該按照project_id分組數據。

NB 列中選擇在這種情況下必須使用聚合函數,如MAX(z.name)例如

+0

我需要一些關於PK和FK的更多信息 –

+1

這與主鍵沒有任何關係。我認爲你的意思並不是獨一無二的。哪一個是正確的,EmployeeID和Date在第一個表中是不唯一的。 – Hogan

1

您的第一個表中的兩行用相同的結算日期和相同的員工ID。

所以,當你加入到其他表,你將加入所有3行對於這兩個行。這給你2次3或6個結果行。

如果你只想要3行,你需要弄清楚另一個過濾器上的第一個表給你只有一排 - 如PGM = 32000,並添加到您的where子句。

0

謝謝,夥計們,爲輸入。事實證明,結果集是我想要的結果,如用戶所證實的。這裏的問題是,兩個表上沒有第二個鍵來產生我期望的結果IE如果項目ID在第二個表上。