使用内连接的SQL

时间:2015-08-06 05:59:45

标签: sql vb.net crystal-reports inner-join

所以这就是我的情况。我有3个表格(tblEmployeesinfosqlSumrepMTCsqlSumrepMTC15th)我使用内部联接显示此信息:

SELECT
       SQLSummRepMTC."RepCompany", SQLSummRepMTC."WHTax",
       SQLSummRepMTC."Company", SQLSummRepMTC."MonthName",
       SQLSummRepMTC."YearVal", SQLSummRepMTC."Basis",
       tblEmployeesInfo."LastName", tblEmployeesInfo."FirstName",
       tblEmployeesInfo."Company", tblEmployeesInfo."MInitial", 
       tblEmployeesInfo."Division", sqlSumrepMTC15th."WHTax",
       sqlSumrepMTC15th."Basis"
FROM
   {
     oj ("BIOMETRICS"."dbo"."SQLSummRepMTC" SQLSummRepMTC INNER JOIN
     "BIOMETRICS"."dbo"."tblEmployeesInfo" tblEmployeesInfo 
     ON SQLSummRepMTC."EmployeeNo" = tblEmployeesInfo."EmployeeNo")
     INNER JOIN "BIOMETRICS"."dbo"."sqlSumrepMTC15th" sqlSumrepMTC15th
     ON tblEmployeesInfo."EmployeeNo" = sqlSumrepMTC15th."EmployeeNo"
  }
  ORDER BY
      SQLSummRepMTC."Basis" ASC,
      tblEmployeesInfo."Company" ASC,
      tblEmployeesInfo."LastName" ASC

假设一位员工在sqlSumrepMTC上的记录显示其字段Taxvalue为50,但他sqlSumrepMTC15th上不存在,我的问题是此记录不会显示在内部联接中,因为它在两个表上都没有值。我想要实现的只是在另一个表中不存在时显示0值。这是我的报告。

    Employeeno      employeename   15th      30th
       01               james       10        20
       02                Chris      NULL      50

第一个记录将出现在报告中,因为它在两个表中都存在记录,第二个记录不会出现在第一个表中的null。如果一个值为null或另一个值丢失,我只需要它出现在报告中。提前致谢

1 个答案:

答案 0 :(得分:0)

你有两个连接!因此,如果sqlSumrepMTC15th中没有记录,则需要用LEFT JOIN替换第二个连接。如果可能,sqlSumrepMTC15th AND tblEmployeesInfo中没有联接记录,则需要使用LEFT JOIN替换这两个联接。

此外,您可以通过

替换NULL
SELECT CASE
         WHEN attribute IS NULL
              THEN 0
              ELSE attribute 
         END AS resultColumName,
       nextAttribute
FROM ...