2014-11-16 53 views
0

我運行了這個查詢,看起來正確。但是,我注意到輸出看起來像一堆重複的文本(請參閱下圖)。代碼有問題嗎? 如果是這樣,我怎麼糾正這種異常MS SQL加入函數異常

SELECT   sv.FirstName + ' ' + sv.LastName 'SalesPersonName', 
       st.[Group] 'TerritoryGroup',st.Name 'TerritoryName', 
       StateProvinceName 'ShipState', 
       YEAR(OrderDate) 'Order Year',MONTH(OrderDate) 'Order Month', 
       (soh.TotalDue) Total 
FROM    Person.StateProvince ps 
LEFT OUTER JOIN   Sales.SalesOrderHeader soh 
ON    ps.TerritoryID=soh.TerritoryID 
LEFT OUTER JOIN   Sales.SalesTerritory st 
ON    soh.TerritoryID = st.TerritoryID 
LEFT OUTER JOIN   Sales.vSalesPerson sv 
ON    soh.SalesPersonID = sv.BusinessEntityID 

enter image description here

+1

你檢查使用'INNER'的效果,而不是'左外'加入。如果這沒有幫助,它會幫助我們幫助你,如果你提供了更多的細節。 – Abecee

+0

感謝Abecee,但INNER JOIN和JOIN沒有改變結果。你還需要其他什麼細節? – Eda

+0

表格的相關部分的定義,樣本數據以及此數據的預期結果...但是,如果您從四個表中選擇所有列 - 它是否仍然看起來像重複的行?如果沒有,向查詢中添加「DISTINCT」可能會清除重複。 – Abecee

回答

1

此查詢,但沒有任何重複的行

SELECT  sv.FirstName+' '+sv.LastName 'SalesPersonName',st.[Group]  'TerritoryGroup',st.Name 'TerritoryName', ps.Name 'ShipState', 
    YEAR(OrderDate) 'OrderYear',MONTH(OrderDate) 'OrderMonth',soh.TotalDue 
FROM  Person.Address pa 
INNER JOIN Person.StateProvince ps 
ON  pa.StateProvinceID = ps.StateProvinceID 
INNER JOIN Sales.SalesOrderHeader soh 
ON  pa.AddressID = soh.BillToAddressID 
AND  pa.AddressID = soh.ShipToAddressID 
INNER JOIN Sales.SalesTerritory st 
ON  ps.TerritoryID = st.TerritoryID 
AND  ps.TerritoryID = st.TerritoryID 
AND  soh.TerritoryID = st.TerritoryID 
AND  soh.TerritoryID = st.TerritoryID 
CROSS JOIN Sales.vSalesPerson sv 
+0

這是一個完全不同的查詢,可以很難被視爲你原來的問題的答案。 –

+0

謝謝。也許你是對的。但是,這給我所有我需要從每個指定表中獲得的信息。因此,這是我的目的正確的查詢。 – Eda