2013-11-06 5 views
1

Я использую четыре отдельные таблицы, и я не могу понять, почему мой DISTINCT не фильтрует результаты. Я пытаюсь получить единственный результат для каждого acct.Name в этом запросе. Независимо, если я использую DISTINCT или нет, я получаю точные результаты.SQL Query - Distinct, кажется, не фильтрует

Select DISTINCT 
    acct.Name, 
    inv.InvoiceNumber, 
    acct.AccountNumber, 
    addr.Line1, 
    addr.Line2, 
    addr.Line3, 
    addr.City, 
    addr.StateOrProvince, 
    addr.postalcode 
FROM InvoiceBase inv, AccountBase acct 
JOIN AccountExtensionBase base 
    ON base.AccountId = acct.AccountId 
JOIN CustomerAddressBase addr 
    ON addr.ParentId = acct.AccountId 
WHERE 
    inv.AccountId=acct.AccountId And 
    base.New_cocat_master = 1 And 
    base.New_CompanyId = 1 And 
    inv.StateCode = 0 And 
    inv.Name = '2013 ' + acct.AccountNumber 
ORDER by acct.Name 

Первый результат я получаю теперь первые три значения (acct.Name, inv.InvoiceNumnber, acct.AccountNumber) и остальные столбцы являются пустыми. Вторая строка содержит все столбцы с информацией. Я просто пытаюсь сделать acct.Name быть DISTINCT

+1

Когда вы говорите: 'удвоенных результаты ', вы имеете в виду, что он извлекает в два раза больше строк, чем вы ожидаете, или на самом деле появляются дубликаты строк в наборе результатов? – Gerrat

ответ

1

Строки DISTINCT

Это может привести к путанице, когда вы выбираете несколько строк, поскольку могут быть скрытые символы/пробелы. Выберите длину каждого из этих полей и сравните так называемые повторяющиеся строки.

+0

Я полностью это вижу сейчас. Я делаю отличный поиск по каждому из этих значений. Если мне нужно только фильтровать Acct.Name, мне нужно создать отдельный оператор select для этого значения? – user2961618

+0

Теперь вы задаете совершенно новый вопрос. вам нужно описать его более подробно, включая подробный ожидаемый результат. –

0

Оказывается, все, что я должен был сделать, это добавить в простом предложении в WHERE, поскольку адрес необходим для правильного выставления счета (если отправить его):

WHERE 
    base.New_cocat_master = 1 And 
    base.New_CompanyId = 1 And 
    inv.StateCode = 0 And 
    inv.Name = '2013 ' + acct.AccountNumber And 
    addr.Line1 IS NOT NULL