Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-连接两个表,每个表有一个键,但需要特定的结果_Sql_Oracle10g - Fatal编程技术网

SQL-连接两个表,每个表有一个键,但需要特定的结果

SQL-连接两个表,每个表有一个键,但需要特定的结果,sql,oracle10g,Sql,Oracle10g,我有两个表,一个键上有一个连接。我每张桌子上只有一把钥匙。如果可能的话,请帮助我获得预期的结果。谢谢 嗨,我有这张桌子,上面有钥匙: SETTLE DT FUND DEPTID PGM CLASS ACCT PROJECT ID BUD REF FY EMPLID AMOUNT AMOUNT1 AMOUNT ALL 9/1/2017 21000 5066000 32000 1290

我有两个表,一个键上有一个连接。我每张桌子上只有一把钥匙。如果可能的话,请帮助我获得预期的结果。谢谢 嗨,我有这张桌子,上面有钥匙:

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

谢谢

我认为EmployeeID和Date不是主键,所以当您连接这两个表时,您会得到值的组合。 您应该按项目id对数据进行分组


在这种情况下,select中的列必须使用聚合函数,例如max(z.name)

第一个表中有两行具有相同的结算日期和相同的员工id

因此,当您连接到另一个表时,您将连接到这两行的所有3行。这将为您提供2倍的3或6个结果行


如果您只需要3行,则需要在第一个表中找出另一个筛选器,以便只提供一行—例如
PGM=32000
,并将其添加到where子句中。

谢谢大家的输入。结果证明,结果集就是我想要的结果,用户确认了这一点。这里的问题是,如果项目id在第二个表上,两个表上都没有第二个键来生成我期望的结果

我需要更多关于PKs和FKST的信息。这与主键无关。我想你的意思是它不是独一无二的。这是正确的,EmployeeID和日期在第一个表中不是唯一的。