Datenbank filtern

havefun

Benutzer
Beiträge
13
Hallo zusammen,
leider muß ich euch mit meinen Problemen belasten.

Ich habe eine Datenbank mit 3 Spalten
Diese möchte ich nach zwei Strings (im Beispiel nach"HDD_05 und "HDD_07) in der name-Spalte
und zusätzlich nach Mehrfach-Werten in der bytes-Spalte filtern.
Im SQL-Management-Studio funktioniert der erste Teil(Strings) aber daß zusätzlich nach Mehrfach-Werten gefiltert wird,
kriege ich einfach nicht hin.
Nach stundenlangen erfolglosen Versuchen setze ich nun auf Hilfe von Menschen mit mehr Erfahrung auf dem Gebiet.
Schon mal danke und ein gutes neues Jahr

SELECT bytes, name
FROM gesamt_11_09
WHERE (name LIKE 'HDD_05%') OR (name LIKE 'HDD_07%')
HAVING count([bytes]) >1

Hier die letzte Fehlermeldung:
Meldung 8120, Ebene 16, Status 1, Zeile 1
Die gesamt_11_09.bytes-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.
 
Werbung:
Datenbanken haben keine Spalten - Tabellen enthalten Spalten (und Datenbanken enthalten Tabellen).

Du musst ein GROUP BY verwenden, wenn Du eine Aggregationsfunktion im HAVING verwendest. Was genau soll denn die Ausgabe sein? Wenn Du z.B. Anzahl der Bytes pro Name willst, dann funktioniert das folgende:

Code:
SELECT name, sum(bytes)
FROM gesamt_11_09
WHERE (name LIKE 'HDD_05%') OR (name LIKE 'HDD_07%')
GROUP BY name
HAVING count(bytes) >1;
 
Datenbanken haben keine Spalten - Tabellen enthalten Spalten (und Datenbanken enthalten Tabellen).

Du musst ein GROUP BY verwenden, wenn Du eine Aggregationsfunktion im HAVING verwendest. Was genau soll denn die Ausgabe sein? Wenn Du z.B. Anzahl der Bytes pro Name willst, dann funktioniert das folgende:

Code:
SELECT name, sum(bytes)
FROM gesamt_11_09
WHERE (name LIKE 'HDD_05%') OR (name LIKE 'HDD_07%')
GROUP BY name
HAVING count(bytes) >1;


Hallo,
danke für die schnelle Antwort.
Die Ausgabe sollte folgendermaßen aussehen:
name bytes
HDD_05xx.xxx 111111111
HDD_07yy.yyy 111111111

mit GROUP BY
habe ich das auch probiert.
Dadurch haben sich nur die Spalten der Tabelle in der Fehlermeldung geändert.
GROUP BY name Fehlermeldung -> bytes
GROUP BY bytes Fehlermeldung -> name
ich werde es aber genau so eingeben wie du es mir geschrieben hast.
Bis dann
 
Die Spalten die nicht Teil des GROUP BY sind, müssen in einer Aggregatsfunktion (sum, count, ...) verwendet werden.
 
ich meine zwar,alle möglichen Kombinationen ausprobiert zu haben und habe es auch nach Beispielen
eingegeben,habe aber vielleicht doch was vergeigt.
Nach der Arbeit gehe ich nochmal ran.

Hallo,
Abfrage wird erfolgreich ausgeführt ,liefert aber keine Werte zurück.
Angezeigt werden zwei Spalten: "name" und "kein Spaltennahme"
Es sind aber definitiv Werte doppelt.
 
Ich habe eine Datenbank mit 3 Spalten
Diese möchte ich nach zwei Strings (im Beispiel nach"HDD_05 und "HDD_07) in der name-Spalte
und zusätzlich nach Mehrfach-Werten in der bytes-Spalte filtern.
Im SQL-Management-Studio funktioniert der erste Teil(Strings) aber daß zusätzlich nach Mehrfach-Werten gefiltert wird,

Bei Deinem Talent mit Begriffen umzugehen vermute ich, daß Du bisher völlig falsch verstanden wurdest. Kann es z.B. sein, daß Du mehrere Werte in einer Spalte führst, z.B. als Text und Komma-getrennt?
 
Hallo,
Abfrage wird erfolgreich ausgeführt ,liefert aber keine Werte zurück.
Angezeigt werden zwei Spalten: "name" und "kein Spaltennahme"
Es sind aber definitiv Werte doppelt.

Hallo,


Bei Deinem Talent mit Begriffen umzugehen vermute ich, daß Du bisher völlig falsch verstanden wurdest. Kann es z.B. sein, daß Du mehrere Werte in einer Spalte führst, z.B. als Text und Komma-getrennt?
Hallo,
ich versuche hiermit,mich verständlich auszudrücken.
Die Tabelle besteht aus drei Spalten:

1.) name -> beliebige Zeichenketten
2.) bytes -> Integer-Werte
3.) Nummer -> Autoinkrement-Schlüsselfeld

Erste Spalte soll nach Zwei Teilstrings UND die zweite Spalte nach mehrfach vorhandenen, beliebigen Werten gefiltert werden.
Die Ausgabe soll also nur Datensätze anzeigen deren erste Spalte einen der Teilstrings enthält und deren zweite Spalte den gleichen Wert hat.


name bytes

HDD_05xx.xxx 111111111
HDD_07yy.yyy 111111111



Ich hoffe mit den Begriffen hat es jetzt besser geklappt.
 
Hrm. Nicht sicher, aber evtl. hilft Dir das ja:

Code:
test=*# select * from havefun ;
     name     |   bytes   
--------------+-----------
 HDD_05xx.xxx | 111111111
 HDD_07yy.yyy | 111111111
(2 rows)

test=*# with x as (select bytes, count(1) from havefun group by bytes) select havefun.* from havefun left join x on havefun.bytes=x.bytes where ((name LIKE 'HDD_05%') OR (name LIKE 'HDD_07%')) and x.count > 1;
     name     |   bytes   
--------------+-----------
 HDD_07yy.yyy | 111111111
 HDD_05xx.xxx | 111111111
(2 rows)

test=*#

PostgreSQL, aber M$SQL kann auch WITH-Syntax.
 
Hrm. Nicht sicher, aber evtl. hilft Dir das ja:

Code:
test=*# select * from havefun ;
     name     |   bytes  
--------------+-----------
 HDD_05xx.xxx | 111111111
 HDD_07yy.yyy | 111111111
(2 rows)

test=*# with x as (select bytes, count(1) from havefun group by bytes) select havefun.* from havefun left join x on havefun.bytes=x.bytes where ((name LIKE 'HDD_05%') OR (name LIKE 'HDD_07%')) and x.count > 1;
     name     |   bytes  
--------------+-----------
 HDD_07yy.yyy | 111111111
 HDD_05xx.xxx | 111111111
(2 rows)

test=*#

PostgreSQL, aber M$SQL kann auch WITH-Syntax.

Hallo,
habe den Tabellen-Namen angepasst.

test=*# with x as (select bytes, count(1) from [dbo].[Directory] group by bytes) select * from [dbo].[Directory] left join x on [dbo].[Directory].bytes=x.bytes where ((name LIKE 'HDD_05%') OR (name LIKE 'HDD_07%')) and x.count > 1;

arbeite mit Microsoft SQLEXPRESS und dem Microsoft SQL Management Studio.
Hier die Meldungen:

Meldung 102, Ebene 15, Status 1, Zeile 1
Falsche Syntax in der Nähe von "=".
Meldung 319, Ebene 15, Status 1, Zeile 1
Falsche Syntax in der Nähe des WITH-Schlüsselworts. Falls diese Anweisung ein allgemeiner Tabellenausdruck, eine XMLNAMESPACES-Klausel oder eine CHANGE TRACKING CONTEXT-Klausel ist, muss die vorherige Anweisung mit einem Semikolon abgeschlossen werden.
Meldung 102, Ebene 15, Status 1, Zeile 2
Falsche Syntax in der Nähe von "name".

"test" ist als fehlerhaft markiert.
Kommentar:Die gespeicherte Prozedur "test" wurde nicht gefunden.

"count" ist als fehlerhaft markiert.
Kommentar:Ungültiger Spaltenname "count"

Erstes "x" ist als fehlerhaft markiert.
Kommentar: Für die Spalte '2' von'x' wurde keine Spalte angegeben.
 
Nun - da es der Prompt ist, ist es wohl nicht Bestandteil des Kommandos, oder?
Bin jetzt zu Hause.Tabellenname ist korrekt.

with x as (select bytes, count(1) from [dbo].[gesamt_11_09] group by bytes) select * from [dbo].[gesamt_11_09] left join x on [dbo].[gesamt_11_09].bytes=x.bytes where ((name LIKE 'HDD_05%') OR (name LIKE 'HDD_07%')) and x.count > 1;

Meldung 8155, Ebene 16, Status 2, Zeile 1
Kein Spaltenname wurde für die Spalte 2 von "x" angegeben.

"count" ist als fehlerhaft markiert.
Kommentar:Ungültiger Spaltenname "count"

Erstes "x" ist als fehlerhaft markiert.
Kommentar: Für die Spalte '2' von'x' wurde keine Spalte angegeben.
 
Werbung:
mach mal ein

Code:
with x as (select bytes, count(1) from [dbo].[gesamt_11_09] group by bytes) select * x

kann schon sein, daß M$SQL sich etwas anders verhält, die Spalten andere Namen haben etc.
 
Zurück
Oben