Zum Inhalt springen

Probleme mit komplexer Abfrage


Matrixx

Empfohlene Beiträge

Hallo,

ich möchte eine Übersicht von Zugriffen verschiedener Kunden nach Monaten auswerten.

Ich habe in meiner DB folgende Tabellen:

shoplogin:

uid | kundenname | username | passwort

shopzugriff:

uid | zugriffsdatum

Ich möchte jetzt eine Webseite generieren mit der ich alle Kunden auswerten möchte:

Kunde: xyz

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

Monat | Anzahl Zugriffe

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

januar 2004 33

...

Kunde abc

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

Monat | Anzahl Zugriffe

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

januar 2004 66

...

Ich habe es aber nicht geschafft eine solche Struktur zu bekommen.

Möchte dies dann mit ASP generieren.

Bitte um Hilfe!!

Gruss Dirk

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn du eine Tabelle haben willst, welche die Daten für eine eigene Formatierung sammelt, dann versuch's mal mit:

-- temporäre Tabelle als Übersicht

SELECT

	sl.[kundenname],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 1 AND sl.uid = uid) AS [Januar],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 2 AND sl.uid = uid) AS [Februar],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 3 AND sl.uid = uid) AS [März],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 4 AND sl.uid = uid) AS [April],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 5 AND sl.uid = uid) AS [Mai],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 6 AND sl.uid = uid) AS [Juni],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 7 AND sl.uid = uid) AS [Juli],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 8 AND sl.uid = uid) AS [August],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 9 AND sl.uid = uid) AS [September],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 10 AND sl.uid = uid) AS [Oktober],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 11 AND sl.uid = uid) AS [November],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = 12 AND sl.uid = uid) AS [Dezember],

	(SELECT COUNT(zugriffsdatum) FROM shopzugriff WHERE sl.uid = uid) AS [Gesamt]

FROM 

	shoplogin AS sl

-- Wenn das Jahr uninteressant ist, können alle Zeilen ab hier entfernt werden

		INNER JOIN

	shopzugriff AS sz

		ON

	sl.uid = sz.uid

WHERE

	DATEPART(year, sz.zugriffsdatum) = 2004 -- das Jahr kann geändert werden
Die von dir gewünschte Ausgabe kann mit dem folgenden script erreicht werden:
DECLARE @kundenname VARCHAR(25)

DECLARE @uid INT

DECLARE @count INT

DECLARE @datum DATETIME

DECLARE @jahr INT

SET @jahr = 2004 -- !!! hier das gewünschte Jahr eintragen !!!

DECLARE kunden CURSOR SCROLL

FOR SELECT uid, kundenname

FROM shoplogin

OPEN kunden

FETCH NEXT FROM kunden

INTO @uid, @kundenname

SET @datum = '01/01/'+CAST(@jahr AS char(4))

WHILE @@FETCH_STATUS = 0

BEGIN

SELECT @count = COUNT(zugriffsdatum) FROM shopzugriff WHERE DATEPART(month, zugriffsdatum) = DATEPART(month, @datum) 

AND DATEPART(year, zugriffsdatum) = DATEPART(year, @datum) AND uid = @uid

--IF @count > 0 -- !!! diese Zeile aktivieren, wenn nur Ausgaben für Zugriffe interessant sind !!!

BEGIN

	PRINT ''

	PRINT ''

	PRINT 'Kunde: ' + @kundenname

	PRINT '------------------'

	PRINT ''

	PRINT 'Monat | Anzahl Zugriffe'

	PRINT '-----------------------'

	PRINT DATENAME(month, @datum) + ' ' + DATENAME(year, @datum) + ' ' + CAST(@count AS varchar(10))

END

	FETCH NEXT FROM kunden

	INTO @uid, @kundenname

	IF @@FETCH_STATUS <> 0

	BEGIN

		SET @datum = DATEADD(month, 1, @datum)

		IF DATEPART(year, @datum) <> @jahr

		BEGIN BREAK END

		FETCH FIRST FROM kunden

		INTO @uid, @kundenname

	END 

END

CLOSE kunden

DEALLOCATE kunden

IN NO EVENT SHALL just_me BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF SCRIPTS, DOCUMENTS, PROVISION OF OR FAILURE TO PROVIDE SERVICES, OR INFORMATION AVAILABLE FROM HIM.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...