sql различен с изискване на множество полета

Използвам Advantage Database Server от Sybase. Трябва да елиминирам дублирани addbatch от моя отчет, но имам проблеми с изтеглянето само на различни записи. Някаква идея какво пропускам?

ето какво използвам

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. Не съм сигурен къде греша! Благодаря предварително! Дори не бях сигурен как да потърся в Google този въпрос!


person MateoGP    schedule 15.06.2015    source източник
comment
Можете ли да публикувате извадка от резултата, който получавате?   -  person MartianCodeHound    schedule 15.06.2015
comment
Ако приемем, че даден addbatch има множество SKU (или всяка друга колона), разбира се, ще получите обратно няколко реда за това addbatch. Ако искате отделни редове за добавяне на партида, ще трябва да не включвате стойностите в заявката, които причиняват дупките.   -  person Andrew    schedule 15.06.2015
comment
@MartianCodeHound резултатите, които получавам са:   -  person MateoGP    schedule 15.06.2015
comment
@MartianCodeHound ето резултатите, които получавам връзка   -  person MateoGP    schedule 15.06.2015
comment
@Andrew, ако премахна останалите селекции, работи добре, но имам нужда от тези полета в отчета си, за да работи.   -  person MateoGP    schedule 15.06.2015
comment
Добре, така че за партида 2158 коя дата искате да използвате в отчета си: 6/10/2015 или 6/02/2015?   -  person MartianCodeHound    schedule 15.06.2015
comment
@MartianCodeHound Виждам дупката в моята идея. Трябва да намеря друго поле, в което да работя, защото addbatches могат да бъдат прехвърлени по всяко време отделно от тяхната група. Благодаря, че ме накарахте да го осъзная! Ще пиша обратно, след като се върна в системата.   -  person MateoGP    schedule 15.06.2015


Отговори (3)


Проблемът е, че трябва да проверите уникалността на една колона и това всъщност не е това, което вашият код изпълнява. Опитайте тази

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
person DarkNinja955    schedule 15.06.2015
comment
Здравей @DarkNinja955, опитах това и завърших с: poQuery: Грешка 7200: Грешка AQE: Състояние = 42000; NativeError = 2115; [iAnywhere Solutions][Advantage SQL Engine]Очакваният лексикален елемент не е намерен: FROM Липсва Ви ключовата дума FROM след дефинициите на колони във вашия оператор SELECT. Възникна проблем при анализирането на имената на таблиците след ключовата дума FROM във вашия оператор SELECT. -- Местоположението на грешката в SQL оператора е: 142 (ред: 4 колона: 43) - person MateoGP; 15.06.2015
comment
Трябва да попитам, но заменихте ли ETC в кода с останалите си колони? - person DarkNinja955; 15.06.2015

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

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
person Henry L    schedule 15.06.2015

Ако искате да имате уникални партидни номера в резултата си, трябва да ГРУПИРАТЕ ПО партидното поле само.

Нещо подобно трябва да работи:

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]

Не казахте как искате да обобщавате другите колони, просто заменете MIN с нещо, което има повече смисъл за вас, като SUM или COUNT и т.н.

Има тема за групирането в документацията.

PS: SELECT DISTINCT е (по принцип) просто по-кратък път до GROUP BY във всички колони без никакво агрегиране.

person Jens Mühlenhoff    schedule 15.06.2015