Jump to content

Frage bzw. Hilfe bei einer MS-SQL-Abfrage


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo *,

 

ich hänge jetzt schon mehrere Tage an einer Abfrage und scheine mich so verrannt zu haben, dass ich das Licht am Ende des Tunnels nicht mehr sehe.

 

Meine Anwendung pflegt Maschinen-Reparaturen.

 

Nun möchte ich alle Reparaturen der Maschinen auflisten und Abfrage auf der Störungen auf die TOP 10 Maschinen mit den meisten Störungen ermitteln

 

Anbei mein Ansatz. Wobei dieser kein Ergebnis liefert, da meine Unterabfrage den Count(*) und T.WONUM zurück liefert.

 

Ohne die Unterabfrage liefert mir der Aufruf leider alle Reparuren, aller Maschinen zurück.

 

Vielleicht findet jemand einen Moment, um einen Blick drauf zu werfen, um einen Gedankenanstoß zu liefern.

 

SELECT

WOP.CLOSEDATE AS Arbeitsdatum

,WOP.EQNUM AS Maschine

,WOEQLIST.SERIALNUM AS MaNr

,WOMETER.METERREADING AS BetrStd

,WOP.ITEMNUM AS Sachnmummer

,WOP.DESCRIPTION AS Bezeichnung

,(WOP.TOTALUNITCOST / WOP.QTYUSED) AS Einzelpreis

,WOP.QTYUSED AS Ausg

,WO.TASKDESC AS Bemerkung

,WOE.EMPCODE AS ArbnNr

,WO.WONUM AS Referenz

,(SELECT COUNT(*) FROM WOP

INNER JOIN WO ON WOP.WONUM = WO.WONUM WHERE WOP.CLOSEDATE > 1900-01-01 AND WO.WONUM = WOP.WONUM)AS Zaehler

FROM

WO

INNER JOIN

WOP ON WO.WONUM = WOP.WONUM

LEFT JOIN

WOEQLIST ON WO.WONUM = WOEQLIST.WONUM

LEFT JOIN

WOMETER ON WO.WONUM = WOMETER.WONUM

LEFT JOIN

WOE ON WO.WONUM = WOE.WONUM

WHERE WOP.WONUM IN

(SELECT TOP 10 T.WONUM, COUNT(*) as MyCount FROM WOP AS T WHERE T.WONUM = WOP.WONUM GROUP BY T.WONUM ORDER BY MyCount DESC ) AND WOP.CLOSEDATE > 1900-01-01

ORDER BY Zaehler, WOP.CLOSEDATE DESC

 

Vielen Dank im voraus für Eure Unterstützung.

 

Gruß

Dirk

Link zu diesem Kommentar

use MeineReparaturDatenbank

GO

 

 

/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

SCALARE FUNKTION, die den Zähler zurückgibt

Übergabeparameter ist wop.closedate

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */

 

USE MeineReparaturdatenbank

GO

 

IF OBJECT_ID (N'schema.udf_Zaehler_ermitteln') IS NOT NULL

DROP FUNCTION schema.udf_Zaehler_ermitteln

GO

 

 

-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

CREATE FUNCTION schema.udf_Zaehler_ermitteln

(

@udf_wop_closedate date

)

RETURNS int

WITH EXECUTE AS ????????????????

AS

BEGIN

 

RETURN (SELECT COUNT(*)

FROM WOP

INNER JOIN WO ON WOP.WONUM = WO.WONUM

WHERE WOP.CLOSEDATE > 1900-01-01 AND WO.WONUM = WOP.WONUM)

 

END

GO

 

 

 

 

-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-- VIEW erstellen

-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

IF EXISTS(SELECT name FROM sys.views WHERE name = N'vTOP10WONUM')

DROP VIEW vTOP10WONUM

GO

 

 

CREATE VIEW schema.vTOP10WONUM

AS

SELECT TOP 10 T.WONUM as 'WonumReferenz'

,COUNT(*) as 'MyTop10Count'

FROM WOP AS T

WHERE T.WONUM = WOP.WONUM

GROUP BY T.WONUM

ORDER BY MyCount DESC )

 

 

 

-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-- jetzt Dein SELECT

-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

SELECT WOP.CLOSEDATE AS Arbeitsdatum

,WOP.EQNUM AS Maschine

,WOEQLIST.SERIALNUM AS MaNr

,WOMETER.METERREADING AS BetrStd

,WOP.ITEMNUM AS Sachnmummer

,WOP.DESCRIPTION AS Bezeichnung

,(WOP.TOTALUNITCOST / WOP.QTYUSED) AS Einzelpreis

,WOP.QTYUSED AS Ausg

,WO.TASKDESC AS Bemerkung

,WOE.EMPCODE AS ArbnNr

,WO.WONUM AS Referenz

,schema.udf_Zaehler_ermitteln(WOP.CloseDate) AS Zaehler

FROM WO

INNER JOIN WOP ON WO.WONUM = WOP.WONUM

LEFT JOIN WOEQLIST ON WO.WONUM = WOEQLIST.WONUM

LEFT JOIN WOMETER ON WO.WONUM = WOMETER.WONUM

LEFT JOIN WOE ON WO.WONUM = WOE.WONUM

WHERE WOP.WONUM IN (SELECT mytop10Count

FROM vTOP10WONUM

WHERE vTOP10WONUM.WonumReferenz = WOP.WONUM

ORDER BY MyCount DESC )

AND WOP.CLOSEDATE > 1900-01-01

ORDER BY Zaehler

, WOP.CLOSEDATE DESC

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

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

×
×
  • Neu erstellen...