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' ) 
4

1 回答 1

0

好的,首先您应该在视图中列出您需要的实际列名,而不是使用*. 我相信您只需要将INNER JOINs 更改为LEFT JOINs。所以它会是这样的:

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似乎存在重复的情况。

于 2012-04-24T17:13:43.413 回答