2014-11-16 1 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' вместо' LEFT OUTER 'присоединяется. Если это не поможет, это поможет нам помочь вам, если вы предоставите более подробную информацию. – Abecee

+0

Спасибо Abecee, но INNER JOIN и JOIN не изменили результат. Какие еще детали вам нужны? – Eda

+0

Определение соответствующих частей таблиц, выборочных данных и ожидаемых результатов для этих данных ... Однако, если вы выберете все столбцы из четырех таблиц - все равно это выглядит как повторяющиеся строки? Если нет, добавление 'DISTINCT' к вашему запросу может устранить дублирование. – Abecee

ответ

1

Этот запрос RAN, без повторяющихся строк

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