2012-04-24 70 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

相關問題