2013-07-17 22 views
0

我創建的SQL管理器2012年認爲,有一些員工詳細信息(姓名,costcenter等)。 在主報告中標註的成本中心比我需要的更詳細(但是,我將來需要這些信息,因此我不想刪除它)。我創建了一個包含所有帶有基本標籤的成本中心的表格。不正確的加入在查看

我加入了主要EMPLOYEE表視圖,然後添加成本中心標籤表視圖。我將員工表中的CostCenterNo連接到標籤表中的CostCenterNo。我選擇了要查看的標籤名稱,而不是僱員表中的主標籤。

問題是,當我運行它複製幾行,從400+將超過1200行的連接。我想要做的只是用簡單的標籤來替換複雜的標籤以進行報告。

這裏是查看代碼。

SELECT  dbo.EEMasterData.EmpNo, dbo.EEMasterData.EmpName, 
dbo.EEMasterData.JobNo, dbo.EEMasterData.JobName, dbo.EEMasterData.OrgUnit, 
dbo.EEMasterData.OrgName, dbo.EEMasterData.PArea, 
dbo.EEMasterData.PSubAreaNo,dbo.EEMasterData.PSubAreaName, 
dbo.EEMasterData.MasterCCNo,dbo.CostCenterConsolidatedLkUp.CostCenterMain, 
dbo.EEMasterData.PositionNo, dbo.EEMasterData.PositionName, 
dbo.EEMasterData.EmpGroupNo, dbo.EEMasterData.EmpGroupName, 
dbo.EEMasterData.EmpSubGroupNo, dbo.EEMasterData.EmpSubGroupName, 
dbo.EEMasterData.StartDate, dbo.EEMasterData.EndDate, dbo.EEMasterData.Status, 
dbo.EEMasterData.EmpStatus 
FROM   dbo.CostCenterConsolidatedLkUp INNER JOIN 
        dbo.EEMasterData ON 
dbo.CostCenterConsolidatedLkUp.CostCenterMainNo = dbo.EEMasterData.MasterCCNo 

我認爲加入是什麼導致重複,但它不會讓我改變視圖設計器中的連接。

有誰知道如何更改加入或是否有更好的方式來增加這個標籤。大約有100多個成本中心,所以編碼會很乏味,這就是爲什麼我試圖通過這個觀點去做。 (我在短時間表上,很抱歉)。

+0

更改你的'SELECT'到'選擇DISTINCT'並重新運行查詢。如果你仍然有1200個結果行,那麼你需要重新思考你正在問什麼,並決定你真正想要的400個。 – Anon

+0

@Anon distinct不是解決連接問題的探索者方式 –

+0

我認爲這是Join的問題。目前它只允許我進行內部加入。我試圖在它上面輸入並進行Outer join,但是當我再次運行查詢時,它給了我一個錯誤。 –

回答

1

這會給你正確的行數。它將爲您提供來自CostCenterConsolidatedLkUp的CostCenterMain的或多或少的隨機值。

你需要SQLSERVER 2005+

SELECT e.EmpNo, e.EmpName, 
e.JobNo, e.JobName, 
e.OrgUnit, 
e.OrgName, 
e.PArea, 
e.PSubAreaNo, 
e.PSubAreaName, 
e.MasterCCNo, 
c.CostCenterMain, 
e.PositionNo, 
e.PositionName, 
e.EmpGroupNo, 
e.EmpGroupName, 
e.EmpSubGroupNo, 
e.EmpSubGroupName, 
e.StartDate, 
e.EndDate, 
e.Status, 
e.EmpStatus 
FROM dbo.EEMasterData e 
cross apply 
(select top 1 CostCenterMain 
FROM dbo.CostCenterConsolidatedLkUp 
WHERE CostCenterMainNo = e.MasterCCNo 
) e 
+0

上面運行了一個查詢,並返回了以下內容。 Msg 156,Level 15,State 1,Line 20 關鍵字'ON'附近的語法錯誤。 消息102,級別15,狀態1,行24 「e」附近的語法錯誤。 –

+1

@ BrianD.Brubaker對不起,我的剪貼太多了。現在應該可以 –