在同一个表的列中查看行中的记录

时间:2012-04-24 16:46:12

标签: sql sql-server

我正在创建一个视图,以显示包含合约日期的记录。

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

日期主要存储在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' ) 

1 个答案:

答案 0 :(得分:0)

好的,首先,您应列出视图中所需的实际列名,而不是*。我相信您只需要为INNER JOIN更改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上似乎存在重复的情况。