verwendetes Datenbanksystem: SQL 2005
Hallo mal wieder,
mir macht seit Stunden etwas zu schaffen.
ich ziehe mir aus meiner DB per Select eine Liste mit Daten die nach Datum geordnet sind.
Wie ist es mir nun möglich, das ganze in Form einer Kreuztabelle ähnlich diesem Schema anzuzeigen?
08-08.30 15 Kontakte
08:30-09:00 27 Kontakte
09-09.30 18 Kontakte
.........
Ziel ist ein Bericht in dem ich mir mehrere Vertreter anzeigen lasse und ich so die Kontakte die getätigt werden anzeigen lassen kann.
Ich weiss allerdings nicht wie ich das darstellen könnte.
Select Datecreate,Bearbeiter
from Kontakte WHERE Datecreate = Date()
ist der grundlegende SELECT der mir die ganzen Daten in einem Dataset bereitstellt.
Ich weiss nur nicht wie ich im Berichtsdesigner oder auch in der SQL Abfrage solche Dinge wie
DATECREATE AS WZ1 WHERE DATECREATE between 08:00 and 08:30
AND
DATECREATE AS WZ2 WHERE DATECREATE between = 08:31 and 09:00
unterbringen soll.
das der Code hier schwachsinn ist, ist mir schon klar 🙂
Bietet der Berichtsdesigner eine Funktionalität mit der ich sowas schnell lösen kann oder weiss evtl. wie ich die Abfrage richtig gestallten muss damit mir meine gewünschten Ergebnisse ausgegeben werden?
Viele Grüße & Gute Nacht
Ronny
hallo romu2000,
du könntest die Uhrzeiten normalisieren und PIVOT benutzen, das sollte dir die Daten wie gewünscht zurückliefern.
SQL-Server Onlinedokumentation: Verwenden von PIVOT und UNPIVOT.
-yellow
Selbst ein Weg von tausend Meilen beginnt mit einem Schritt (chinesisches Sprichwort).
Mein Blog: Yellow's Blog auf sqlgut.de
hallo mal wieder,
nachdem yellow mir den typ mit den PIVOT gegeben hat, und ich auch ewig rumporbiert habe, folgende Frage:
SELECT COUNT(DATECREATE) AS WZEIT, CREATEDBY
FROM kontakte
WHERE (DATECREATE BETWEEN CONVERT(DATETIME, '2007-01-01 00:00:00', 102) AND CONVERT(DATETIME, '2007-01-30 00:00:00', 102))
GROUP BY CREATEDBY
UNION
SELECT COUNT(DATECREATE) AS WZEIT1, CREATEDBY
FROM kontakte AS kontakte_1
WHERE (DATECREATE BETWEEN CONVERT(DATETIME, '2007-02-01 00:00:00', 102) AND CONVERT(DATETIME, '2007-02-28 00:00:00', 102))
GROUP BY CREATEDBY
so liefert mir die3 Abfrage zwar ein paar Ergebnisse, erstellt aber weder die Spalte wzeit1 noch bin ich mit der Ausgabe zufrieden.
Das Problem welches ich mit PIVOT habe, ist : Wo und wie gebe ich die Abfragekriterien ein ?????
Wie kann ich z.b. sagen, dass ich alle Kontakte in einem bestimmtem Zeitraum haben möchte (halb Stündlich).
Das obige Beispiel war nur ein Test mit Monatsrückgabe. Ich weiss das ich das bequemer mit MONTH machen kann.
Weiss jemand Rat?
P.s:
In Access habe ich folgendes:
Einmal die Abfrage nach den Kontakten:
SELECT kontakte.CREATEDBY, kontakte.DATECREATE
FROM kontakte
WHERE (((kontakte.DATECREATE)>=Date() And (kontakte.DATECREATE)<=Now()));
Und einmal die PIVOT Sache:
TRANSFORM Count(*) AS Anzahl
SELECT (Format([DATECREATE],"hh")) AS Ausdr1
FROM Alle_Kontakte_Detail_nach_Uhrzeit
GROUP BY (Int([DATECREATE]*48)), (Format([DATECREATE],"hh"))
PIVOT Alle_Kontakte_Detail_nach_Uhrzeit.CREATEDBY;
Das ganze funktioniert nur leider in sQL nicht .-(
Vllt. weiss ja jemand Rat.
VIele Grüße
ROnny
Hallo nochmal,
ich habe nun folgendes verständnisproblem:
Wie sage ich der PIVOT-Abfrage wie die Spaltennamen heissen?
Angenommen, ein mitarbeiter macht einen Kontakt um 05:32 alle anderenfangen normalerweise aber erst um 08:00 uhr an, so ist doch die SPaltenbenennung total daneben, oder?
Ich habe keinen Plan bei der Abfrage.
Ist es denn irgenwie möglich, gezielte Abfragen zu machen die dann auch einer entsprechenden Spalte zuordbar wären? z.b. Spalte1 AS [<08:00]
Spalte2 AS [08:30-09:00]
......
Ich steh total aufm Schlauch da mir das Verständnis für die Sache derzeit total fehlt.
Viele Grüße
Ronny