我正在创建一个视图,以显示包含合约日期的记录。
此视图的数据来自两个表,一个存储客户端详细信息,另一个存储日期信息。
日期主要存储在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 :(得分: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
上似乎存在重复的情况。