从同一个表格的列中查看行中的记录
问题描述:
我正在创建一个视图来显示其中包含合同日期的记录。从同一个表格的列中查看行中的记录
该视图的数据来自两个表格,一个存储客户端详细信息,另一个存储日期信息。
日期本身存储在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')
答
好吧,首先,你应该列出你需要在你的视图的实际列名称,而不是使用*
。我相信你只需要更改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
似乎有重复的情况。
当你需要一个'OUTER JOIN'时,你可能使用了一些'INNER JOIN',但是很难说没有看你的代码(所以请发表你的代码) – Lamak 2012-04-24 16:50:02
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
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