SQL-Vereinfachung möglich?

25/01/2010 - 14:10 von Gerald Aichholzer | Report spam
Hallo NG,

ich habe eine Tabelle, in der neben diversen Kriterien auch
eine Belegnummer gespeichert ist. Jedes Kriterium kann in
der Tabelle öfter enthalten sein. Auch ist es möglich, dass
für ein Kriterium unterschiedliche Belegnummern gespeichert
sind.

Mit folgendem SQL ermittle ich nun eine Liste aller jener
Kriterien, für die jeweils immer die selbe Belegnummer ver-
geben worden ist:


with cteBasis as (
select kriterium, belegnr
from tabelle
group by kriterium, belegnr
)
select kriterium, belegnr = max(belegnr)
from cteBasis
group by kriterium
having count(*) = 1


Ich brauche noch die Datensatz-ID aus der Tabelle dazu und
würde das Statement wie folgt erweitern:

with cteBasis as (
select kriterium, belegnr
from tabelle
group by kriterium, belegnr
)
,cteKriterium as (
select kriterium
from cteBasis
group by kriterium
having count(*) = 1
)
select id = max(t.id), k.kriterium, belegnr = max(t.belegnr)
from tabelle t
inner join cteKriterium k on k.kriterium = t.kriterium
group by k.kriterium


Kann man diese Anweisung noch verkürzen bzw. optimieren?

Vielen Dank und schöne Grüße,
Gerald
 

Lesen sie die antworten

#1 Stefan Hoffmann
25/01/2010 - 14:17 | Warnen spam
hallo Gerald,

On 25.01.2010 14:10, Gerald Aichholzer wrote:
Mit folgendem SQL ermittle ich nun eine Liste aller jener
Kriterien, für die jeweils immer die selbe Belegnummer ver-
geben worden ist:


with cteBasis as (
select kriterium, belegnr
from tabelle
group by kriterium, belegnr
)
select kriterium, belegnr = max(belegnr)
from cteBasis
group by kriterium
having count(*) = 1


Geht doch auch ohne CTE:

select kriterium, max(belegnr) as belegnr
from tabelle
group by kriterium
having count(*) = 1

Ich brauche noch die Datensatz-ID aus der Tabelle dazu und
würde das Statement wie folgt erweitern:


Der Join bleibt im Kern der gleiche mit verkürzter CTE.


mfG

Ähnliche fragen