# Wert in SQL-Abfrage zählen lassen



## Christa2 (9. Aug 2011)

Guten Abend,

meine Kenntnisse hinsichtlich SQL-Abfragen sind noch sehr rudimentär ausgeprägt, deshalb stehe ich zurzeit vor einem kleinen Problem 
Ich möchte gerne eine Abfrage generieren, die mir das Vorkommen eines jeden Wertes anzeigt sowie den dazugehörigen Zwischenschritt in einer seperaten Zeile.
Beispielsweise habe ich eine Tabelle:

Bestellnummer    Artikel     Anzahl
0001                  Blume       5
0002                  Stuhl         3
0003                  Blume       5

Er solle also möglich sein, dass er mir jeweils das Inkrement des jeweiligen Artikels auf einer neuen Zeile ausgibt. Ich hoffe, es wirkt ein wenig verständlich und ich bedanke mich schon einmal für Eure Bemühungen.

Mit freundlichen Grüßen

Christa


----------



## Marcinek (9. Aug 2011)

Welches Ergebnis erwartest du dann? Oder ist das das Ergebnis, das du erwartest?


----------



## bERt0r (9. Aug 2011)

Wenn du

```
Select count(Artikel) from tabelle;
```
schreibst kommt 3 heraus (3 Datensätze)
Wenn du

```
Select artikel,count(artikel) from tabelle GROUP BY Artikel;
```
schreibst sollte 
Blume 2
Stuhl 1
herauskommen


----------



## DerEisteeTrinker (10. Aug 2011)

@bertor: Du hast die Spalte Anzahl nicht einbezogen. Sprich du zählst nur wie oft eine Art Datensatz da ist. das Count hilft dir nicht. Schau mal nach SUM


----------



## Christa2 (10. Aug 2011)

Vielen Dank für die raschen Antworten. Ich muss mich bei euch entschuldigen, denn ich habe mich etwas undeutlich ausgedrückt. Eventuell sollte ich die Rahmenbedingungen noch etwas mehr konkretisieren. Ich soll die beschriebenen Daten mittels einer Abfrage in eine Anwendung integrieren. Die Abfrage ist soweit auch fertig, allerdings ist in der Anwendung auch ein Feld enthalten, welche den jeweiligen “Zählwert“ beinhaltet, äquivalent zu einer Sequenz.
Bestellnummer:     Sequenz
|011111|                   |1|
|011111|                   |2|
|011111|                   |3|
|022222|                   |1|
|033333|                   |1|
|033333|                   |2|
…
Er soll also möglich sein, in jeder Zeile den aktuellen Wert der Bestellnummer auszugeben. Kommt eine neue Bestellung mit der jeweiligen Bestellnummer hinzu, wird der Wert um eins inkrementiert. Hatte diesbezüglich schon überlegt, ob man gegebenenfalls eine Variable inner-halb der Abfrage definieren kann, die den Wert inkrementiert.

Vielen Dank für Eure Bemühungen

Gruß,

Christa


----------



## AFlieger (10. Aug 2011)

Also wenn ich dein Eingangsbeispiel auf DB-Einträge transferiere müssten die folgenden Einträge enthalten sein:

Best-Nr. | Artikel 
0001 Blume 
0001 Blume 
0001 Blume
0001 Blume
0001 Blume

0003 Blume 
0003 Blume 
0003 Blume
0003 Blume
0003 Blume

0002 Stuhl
0002 Stuhl 
0002 Stuhl

und somit müsste der folgende SQL, exakt das Ergebnis liefern das du haben willst


```
select bestnr, artikel, count (bestnr) FROM tabelle group by bestnr, artikel
```


----------



## Michael... (10. Aug 2011)

Wenn ich das richtig verstanden habe, geht es hier nicht darum Datensätze zu Zählen oder deren Anzahl darzustellen, sondern Datensätze der gleichen "Gruppe" innerhalb dieser durch zu nummerieren.

In Oracle gibt es hierfür die Funktion 
	
	
	
	





```
row_number
```
 Ob es in anderen Datenbanksystem etwas vergleichbares gibt, weiß ich leider nicht.

Beispiel:

```
select bestellnummer,
    row_number() OVER (partition by bestellnummer order by bestellnummer) "Sequenz"
from tabelle
```


----------



## bERt0r (10. Aug 2011)

Ich weis immer noch nicht genau was du meinst, hier mal 2 Vorschläge:

|011111| |1|
|011111| |2|
|011111| |3|
|022222| |1|
|033333| |1|
|033333| |2|


```
SELECT bestellnummer,sum(sequenz) FROM tabelle GROUP BY bestellnummer;
```

->
|011111| 6
|022222| 1
|033333| 3


```
SELECT bestellnummer,max(sequenz) FROM tabelle GROUP BY bestellnummer
```
->
|011111| 3
|022222| 1
|033333| 2

Ich hoffe jedenfalls dass diese Ergebnisse rauskommen, bei max/sum + Group by passiern immer lustige sachen


----------



## Michael... (11. Aug 2011)

Christa2 hat gesagt.:


> Bestellnummer:     Sequenz
> |011111|                   |1|
> |011111|                   |2|
> |011111|                   |3|
> ...


Ich hatte das so verstanden, dass dies das gewünschte Ergebnis ist. Also die Nummerierung in Sequenz durch die Abfrage erzeugt wird.
Darauf bezog sich auch mein Lösungshinweis.


----------

