2012-04-24 68 views
1

我正在创建一个视图来显示其中包含合同日期的记录。从同一个表格的列中查看行中的记录

该视图的数据来自两个表格,一个存储客户端详细信息,另一个存储日期信息。

日期本身存储在DateCol列中,DateCol列的ID来自TypeID,例如118代表合同开始日期,119代表结束日期。 这将返回约250个结果。

我构建的视图对客户端ID进行查找并显示date_type的日期(即118和119显示01/01/2012和01/03/2012)。如果我添加显示120的第三列,则结果总数减少到6.

我需要查看所有结果,但不知道如何构建显示所有这些结果的视图。我无法修改原始数据库,因为它是Maximizer的后盾。

我们正在使用SQL 2005,而且我已经使用Management STudio构建了它,但我的知识有限。

这是我的看法代码:

SELECT * 
FROM dbo.AMGR_Client_Tbl 
     INNER JOIN dbo.FOOTPRINTS_Companies_118 
     ON dbo.AMGR_Client_Tbl.Client_Id = 
      dbo.FOOTPRINTS_Companies_118.Client_Id 
     INNER JOIN dbo.FOOTPRINTS_Companies_119 
     ON dbo.AMGR_Client_Tbl.Client_Id = 
      dbo.FOOTPRINTS_Companies_119.Client_Id 
     INNER JOIN dbo.FOOTPRINTS_Companies_120 
     ON dbo.AMGR_Client_Tbl.Client_Id = 
      dbo.FOOTPRINTS_Companies_120.Client_Id 
     INNER JOIN dbo.FOOTPRINTS_Companies_121 
     ON dbo.AMGR_Client_Tbl.Client_Id = 
      dbo.FOOTPRINTS_Companies_121.Client_Id 
WHERE (dbo.AMGR_Client_Tbl.Record_Type = '1') AND (dbo.AMGR_Client_Tbl.Name_Type = 'C') 
OR (dbo.AMGR_Client_Tbl.Record_Type = '1') AND (dbo.AMGR_Client_Tbl.Name_Type = 'C') 
+0

当你需要一个'OUTER JOIN'时,你可能使用了一些'INNER JOIN',但是很难说没有看你的代码(所以请发表你的代码) – Lamak 2012-04-24 16:50:02

+0

Select * FROM dbo.AMGR_Client_Tbl INNER JOIN dbo.FOOTPRINTS_Companies_118 ON dbo.AMGR_Client_Tbl.Client_Id = dbo.FOOTPRINTS_Companies_118.Client_Id INNER JOIN dbo.FOOTPRINTS_Companies_119 ON dbo.AMGR_Client_Tbl.Client_Id = dbo.FOOTPRINTS_Companies_119.Client_Id INNER JOIN dbo.FOOTPRINTS_Companies_120 ON dbo.AMGR_Client_Tbl.Client_Id = DBO .FOOTPRINTS_Companies_120.Client_Id INNER JOIN dbo.FOOTPRINTS_Companies_121 ON dbo.AMGR_Client_Tbl.Client_Id = dbo.FOOTPRINTS_Companies_121.Client_Id – Raddo2003 2012-04-24 17:02:27

+0

WHERE(dbo.AMGR_Client_Tbl.Record_Type ='1')A ND(dbo.AMGR_Client_Tbl.Name_Type ='C')OR (dbo.AMGR_Client_Tbl.Record_Type ='1')AND(dbo.AMGR_Client_Tbl.Name_Type ='C') – Raddo2003 2012-04-24 17:02:45

回答

0

好吧,首先,你应该列出你需要在你的视图的实际列名称,而不是使用*。我相信你只需要更改INNER JOIN s为LEFT JOIN s。因此,这将是这样的:

SELECT [List Your Columns Here] 
FROM dbo.AMGR_Client_Tbl 
     LEFT JOIN dbo.FOOTPRINTS_Companies_118 
     ON dbo.AMGR_Client_Tbl.Client_Id = 
      dbo.FOOTPRINTS_Companies_118.Client_Id 
     LEFT JOIN dbo.FOOTPRINTS_Companies_119 
     ON dbo.AMGR_Client_Tbl.Client_Id = 
      dbo.FOOTPRINTS_Companies_119.Client_Id 
     LEFT JOIN dbo.FOOTPRINTS_Companies_120 
     ON dbo.AMGR_Client_Tbl.Client_Id = 
      dbo.FOOTPRINTS_Companies_120.Client_Id 
     LEFT JOIN dbo.FOOTPRINTS_Companies_121 
     ON dbo.AMGR_Client_Tbl.Client_Id = 
      dbo.FOOTPRINTS_Companies_121.Client_Id 
WHERE (dbo.AMGR_Client_Tbl.Record_Type = '1') AND (dbo.AMGR_Client_Tbl.Name_Type = 'C') 
OR (dbo.AMGR_Client_Tbl.Record_Type = '1') AND (dbo.AMGR_Client_Tbl.Name_Type = 'C') 

此外,你应该注意,您在WHERE似乎有重复的情况。

+0

Lamak,我修改了上面的代码时使用了LEFT JOIN而不是INNERJOIN,它的工作非常完美!非常感谢! – Raddo2003 2012-04-24 21:53:17

+0

@ Raddo2003 - 哎呀,对不起,我修改了我的答案:-) – Lamak 2012-04-25 03:03:40

相关问题