2015-06-15 4 views
0

Я использую Advantage Database Server от Sybase. Мне нужно удалить дубликат addbatch из моего отчета, но у меня возникли проблемы с перетаскиванием только отдельных записей. Любая идея, что мне не хватает?sql с несколькими полями requried

вот что я использую

SELECT DISTINCT 
    SI.[addbatch] as [Batch#], 
    SI.[current account #] as [Account], 
    SI.[status date] as [Status Date], 
    SI.[SKU] as [SKU], 
    AC.[email address] as [Email] 
FROM salesinventory SI, accounts AC 
WHERE AC.[account #]=SI.[current account #] and [Status Date] > '6/1/2015' 

Я все еще получаю дубликат addbatch это же. Я не уверен, где я ошибаюсь! Заранее спасибо! Даже не знал, как решить этот вопрос!

+1

Можете ли вы опубликовать образец результата, который вы получаете? – MartianCodeHound

+1

Предполагая, что данная 'addbatch' имеет несколько SKU (или любой другой столбец), вы, конечно же, получите несколько строк для этой' addbatch'. Если вам нужны разные строки добавления, вам не нужно включать значения в запрос, вызывающий обман. – Andrew

+0

@MartianCodeПолучить результаты, которые я получаю: – MateoGP

ответ

0

Проблема в том, что вам нужно проверить уникальность одного столбца, и на самом деле это не то, что делает ваш код. Попробуйте это

SELECT * 
FROM (SELECT SI.[addbatch] as [Batch#], 
     SI.[current account #] as [Account], 
     SI.[status date] as [Status Date], 
     ETC, 
      ROW_NUMBER() OVER (PARTITION BY [Batch#]) AS RowNumber 
    FROM salesinventory SI, accounts AC 
    WHERE AC.[account #]=SI.[current account #] and [Status Date] > '6/1/2015') as rec 
WHERE rec.RowNumber = 1 
+0

Hi @ DarkNinja955, Я пробовал это и закончил с: poQuery: Error 7200: AQE Error: State = 42000; NativeError = 2115; [iAnywhere Solutions] [Advantage SQL Engine] Ожидаемый лексический элемент не найден: FROM Вы не используете ключевое слово FROM после определений столбцов в инструкции SELECT. Возникла проблема с анализом таблиц имен после ключевого слова FROM в инструкции SELECT. - Место ошибки в инструкции SQL: 142 (строка: 4 column: 43) – MateoGP

+0

Я должен спросить, но заменили ли вы «ETC» в коде оставшимися столбцами? – DarkNinja955

0

- Следующий код является общим для удаления дубликатов записей, модифицированных в соответствии с вашими потребностями.

select x.[Well_Name] as nameX 
     , x.[TestDate] as dateX 
from (
SELECT count(*) as dup 
     ,[Well_Name] 

     ,[TestDate]enter code here 
    FROM [dbo].[WellTests] 
    group by [TestDate] ,[Well_Name]) x 
    where dup > 1 
0

Если вы хотите иметь уникальные номера партии в ваш результат, вы должны GROUP BY области пакетного только.

Что-то, как это должно работать:

SELECT 
    SI.[addbatch] as [Batch#], 
    MIN(SI.[current account #]) as [Account], 
    MIN(SI.[status date]) as [Status Date], 
    MIN(SI.[SKU]) as [SKU], 
    MIN(AC.[email address]) as [Email] 
FROM salesinventory SI, accounts AC 
WHERE AC.[account #]=SI.[current account #] and [Status Date] > '6/1/2015' 
GROUP BY 
    SI.[addbatch] 

Вы не сказали, как вы хотите aggregate другие столбцы, просто замените MIN с чем-то, что имеет больше смысла для вас, как SUM или COUNT и т.д.

Существует тема о grouping in the documentation.

PS: SELECT DISTINCT есть (в основном) просто короткий путь к GROUP BY на всех колонках без агрегации.

Смежные вопросы