teccara 10 Geschrieben 28. Mai 2012 Melden Geschrieben 28. Mai 2012 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
teccara 10 Geschrieben 29. Mai 2012 Autor Melden Geschrieben 29. Mai 2012 Teilweise, für das aktuelle Problem nutze ich die Standard und Enterprise Edition.
crazyysql 10 Geschrieben 29. Mai 2012 Melden Geschrieben 29. Mai 2012 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
crazyysql 10 Geschrieben 29. Mai 2012 Melden Geschrieben 29. Mai 2012 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 @udf_wop_closedate > 1900-01-01 AND WO.WONUM = WOP.WONUM) END GO
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden