# Abfrage gesucht, die den Anzahl eines Attributes prüft



## isowit (13. Juni 2006)

Ich habe eine Tabelle in der steht, wieviel Geld Artikel in verschiedenen Jahren gekostet haben.

Ich suche eine Abfrage, die mir alle Artikel liefert, für die in mehr als einem Jahr Kosten aufgelaufen sind und gleichzeitig diese Kosten zusammenrechnet.

Die Tabelle sieht so aus wie im Anhang. Könnt Ihr mir helfen? Danke im Voraus!


----------



## Gumbo (13. Juni 2006)

Probier mal Folgendes:
	
	
	



```
SELECT
        COUNT(DISTINCT `jahr`),
        `artikel_id`
  FROM
        `tabelle`
  WHERE
        COUNT(DISTINCT `jahr`) > 1
```
Ich weiß nicht, ob es diese Funktionen/Schlüsselwörter auch bei Excel gibt – oder arbeitest du nicht mit Excel?


----------



## isowit (14. Juni 2006)

sorry, hab ich vergessen zu erwaehnen. arbeite mit sql server 2005 ee.

funktioniert leider nicht. bekomme folgende fehlermeldung:
In der WHERE-Klausel darf kein Aggregat auftreten, es sei denn, es befindet sich in einer Unterabfrage, die in einer HAVING-Klausel oder einer Auswahlliste enthalten ist, und die Spalte, die aggregiert wird, ist ein äußerer Verweis.


----------



## z-coupe (14. Juni 2006)

Wie die Fehlermeldung schon sagt, du brauchst eine Having- Clause
Probiers mal so, habe es selber nicht getestet


```
SELECT
          COUNT(DISTINCT jahr)  jahr_count
        ,artikel_id
  FROM
        tabelle
  WHERE
        group by artikel_id
HAVING 
  jahr_count >1
```


----------



## Gumbo (14. Juni 2006)

Kleine Verbesserung zu z-coupes Vorschlag:
	
	
	



```
SELECT
        COUNT(DISTINCT `jahr`) AS `jahr_count`,
        `artikel_id`
  FROM
        `tabelle`
  GROUP BY
        `artikel_id`
  HAVING
        `jahr_count` > 1
```


----------



## z-coupe (14. Juni 2006)

Danke, hatte das Where ohne Bedingung noch vor dem Group by stehen. 

Hochkommas und AS sind nicht zwingend. Und schöner eingerückt als ich hast du es auch noch.


----------



## isowit (14. Juni 2006)

noch nicht ganz 


```
SELECT	 COUNT(DISTINCT jahr) AS anz,
		 artikel_id
FROM	 t_kosten
WHERE	 anz > 1
GROUP BY artikel_id
```
führt zu Ungültiger Spaltenname 'anz'.




```
SELECT	 COUNT(DISTINCT jahr) AS anz,
		 artikel_id
FROM	 t_kosten
HAVING	 COUNT(DISTINCT jahr) > 1
```
führt zu Die 't_kosten.artikel_id'-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.




```
SELECT COUNT(DISTINCT jahr)  jahr_count, artikel_id
FROM t_kosten
WHERE group by artikel_id HAVING jahr_count >1
```
funktioniert gar nicht. Falsche Syntax in der Nähe des 'group'-Schlüsselwortes.


```
SELECT	 COUNT(DISTINCT jahr) AS anz,
		 artikel_id
FROM	 t_kosten
GROUP BY artikel_id
```
funktioniert soweit  nur liefert mir das eben die anzahl für alle und nicht nur > 2


----------



## z-coupe (14. Juni 2006)

Warum kopierst du nicht einfach das was Gumbo gepostet hat?
diesen Select habe ich in deiner Fahlerliste nicht gesehen. In meinem Select war ein Where zuviel enthalten, hatte ich aber im späteren Post geschrieben.



			
				Gumbo hat gesagt.:
			
		

> Kleine Verbesserung zu z-coupes Vorschlag:
> 
> 
> 
> ...


----------



## isowit (14. Juni 2006)

auch den vorschlag von Gumbo hab ich natürlich versucht. ich habe es nicht kopiert da es den gleichen fehler wie bei meiner ersten kopie ausgibt.

```
SELECT	 COUNT(DISTINCT "jahr") AS "jahr_count",
         "artikel_id"
FROM	 "t_kosten"
GROUP BY "artikel_id"
HAVING	 "jahr_count" > 1
```
Msg 207, Level 16, State 1, Line 5
Ungültiger Spaltenname 'jahr_count'.

anscheinend kann nicht auf jahr_count zugegriffen werden, obwohl es im select defineirt wurde. warum .. keine ahnung


----------



## Gumbo (14. Juni 2006)

Dann noch ein Versuch:
	
	
	



```
SELECT
        COUNT(DISTINCT `jahr`) AS `jahr_count`,
        `artikel_id`
  FROM
       `t_kosten`
  GROUP BY
       `artikel_id`
  HAVING
       COUNT(DISTINCT `jahr`) > 1
```


----------



## z-coupe (14. Juni 2006)

Versuch mal den alias jahr_count durch COUNT(DISTINCT "jahr") zu ersetzen.

also  
HAVING	 COUNT(DISTINCT "jahr")  > 1
statt:
HAVING	 "jahr_count" > 1

Wenns nicht klappen sollte sag mal Bescheid, dann probier ich es mal bei mir aus

Edit: Da war Gumbo wohl scnheller


----------



## isowit (21. Juni 2006)

Gumbo hat gesagt.:
			
		

> Dann noch ein Versuch:
> 
> 
> 
> ...


Funktioniert. Vielen dank für Eure Hilfe!


----------

