PDA

View Full Version : brauche SQL-Idee



cbe
28-07-06, 13:31
Hallo,

eine einfache Fragestellung, aber ich komme nicht drauf.
Aber hier sind doch einige SQL-Experten unterwegs...


In einer Tabelle habe ich u.a. 2 Felder mit Benutzernamen: CRTUSR und CHGUSR.

Ich hätte jetzt gerne einen Select, der mir alle vorhandenen Benutzernamen sagt, wie oft er auftaucht.
Wenn User1 in beiden Feldern steht, soll dies auch doppelt gezählt werden.


Ich mache besser mal ein Bsp:

Datentabelle:
PETER PETER
MARTIN LISA
NELE PETER


soll liefern

LISA 1
MARTIN 1
NELE 1
PETER 3


Hat jemand eine Idee?

Christian

Rincewind
28-07-06, 13:46
Hi,
Hab mal fix was zusammengebastelt bei uns... kann sein dass es auch ein wenig einfacher geht, ich habe hier nur 1 Alpha und 1 Numerisches Feld vergleichen können, daher ist evtl der tab2 ausdruck unnötig.

------------------------------

select tab2.a , sum(tab2.b) from (
select a, b from (
SELECT userfeld1 as a, count(userfeld1) as b FROM datei
group by userfeld1
union
select userfeld2 as a, count(userfeld2) as b from datei
group by userfeld2 ) as tab1 ) as tab2


group by tab2.a
order by tab2.a

-------------------------


Reicht ja vielleicht auch als Denkanstoss :)

Lg
Rince

cbe
28-07-06, 14:17
Hey, select from (select...) ist ja genial, sowas habe ich ja noch nie gemacht!
Und ich dachte ich könnte SQL...

Vielen Dank,
Christian

Brownie
28-07-06, 19:42
in der ganzen Anfrage konnte ich das Wort "bitte" nicht entdecken.

Manchmal meine ich, das Forum sei ein Selbstbedienungsladen, wo man rein geht, aussucht, (nicht zahlt) und dann geht.

Danke gibt es auch selten.

Vielleicht wäre etwas "mitteleuropäische" Höflichkeit angebracht.

Oder, ich bin einfach zu alt.

Gruss, brownie :mad:

B.Hauser
28-07-06, 20:00
Hallo,

mir persönlich sind verschachtelte Sub-Selects zu unübersichtlich. Common-Table-Expressions CTEs sind mir lieber, aber das ist bestimmt Geschmacksache.

Das obige Problem würde ich wie folgt lösen:


with x as (Select CrtUsr as Name from Mytable
Union All
Select ChgUsr as Name from Mytable)
select Name, count(Name)
from x
group by Name


Birgitta

cbe
02-08-06, 11:50
in der ganzen Anfrage konnte ich das Wort "bitte" nicht entdecken.

Manchmal meine ich, das Forum sei ein Selbstbedienungsladen, wo man rein geht, aussucht, (nicht zahlt) und dann geht.

Danke gibt es auch selten.

Vielleicht wäre etwas "mitteleuropäische" Höflichkeit angebracht.

Oder, ich bin einfach zu alt.

Gruss, brownie :mad:

Hallo Brownie,

ich verstehe Dich nicht so recht:

"bitte" steht zwar nicht wörtlich drin, aber "hätte gerne" und wenn die Frage nicht freundlich genug formuliert ist, lag es vielleicht auch daran, dass die Frage ein wenig unter Zeitdruck entstanden ist.

Ich habe mehr Zeit reingesteckt, die Frage selbst möglichst vollständig+unmissverständlich zu formulieren, weil mich das selbst oft ärgert, wenn die eigentlichen Knackpunkte aus der Frage gar nicht klar werden.


Ein "Danke" ist für mich selbstverständlich, wenn sich jemand die Mühe macht und mir Arbeit+Zeit opfert. Ist ja aber auch da oder wie verstehst Du meine Antwort (#3)?


Und dieses Forum ist für mich in keiner Weise eine Einbahnstraße. Natürlich fragen einige Leute mehr als sie antworten und umgekehrt. Aber es scheint sich im Rahmen zu halten. Und die Atmosphäre hier im Forum finde ich prima, es gibt selten dumme Kommentare wie ich es aus anderen Foren schon erlebt habe, und wenn ich auf eine Frage stoße, zu der ich was weiß, ist es für mich selbstverständlich, dass ich dies mitteile - außer es kam mir mal wieder jemand zuvor... Ausgenutzt fühle ich mich dadurch nicht, weil ich weiß, dass ich durch den Austausch hier schon etliche Stunden Arbeit gespart habe.

Vielleicht an dieser Stelle noch einmal ein General-Dank an alle, die mir persönlich - oder in anderen Threads - viel Zeit+Mühe gespart heben:) .


Gruß
Christian Berlage

cbe
02-08-06, 11:55
Hallo,

mir persönlich sind verschachtelte Sub-Selects zu unübersichtlich. Common-Table-Expressions CTEs sind mir lieber, aber das ist bestimmt Geschmacksache.

Das obige Problem würde ich wie folgt lösen:


with x as (Select CrtUsr as Name from Mytable
Union All
Select ChgUsr as Name from Mytable)
select Name, count(Name)
from x
group by Name


Birgitta

Hallo Birgitta,

diese Variante kannte ich auch noch nicht, muss ich mal probieren, was ich lesbarer finde.

Danke!
Christian