Subselect Ergebnis - Syntaxfehler

_Andy!

Benutzer
Beiträge
5
Hallo,

ich möchte aus einer Unterabfrage ein Ergebnis in eine übergeordnete Abfrage übernehmen. Leider scheitere ich bei der Erstellung des Subselects:
Code:
select IDMOTask, AnzahlMaschinen = (
select count(IDMOTask)
from

(select f.IDMOTask, f.IDEmployeeMachineTool, f.ResourceType  from CPRImputationMO f
inner join CPRMOTask g on f.IDMOTask = g.IDMOTask
inner join _CPRUsualTaskSTR_Custom h on g.IDUsualTask = h.IDUsualTask
where h.AuswertungRelevant = 1 and f.resourcetype = 1 
group by  f.IDMOTask, f.IDEmployeeMachineTool, f.ResourceType
)
where IDMOTask = f.IDMOTask
group by IDMOTask
)
from CPRMOTask

Konkret habe ich für Produktionsauftragsaufgaben mehrere Rückmeldungen an mehreren Maschinen.
Zu jeder Produktionsauftragsaufgabe möchte ich nun ermitteln, an wie vielen unterschiedlichen Maschinen die Rückmeldungen gemacht wurden.
Dazu habe ich zunächst eine Gruppierung der Rückmeldungen gemacht:

Zunächst muss ich in der untergeordneten Abfrage eine Gruppierung vornehmen:
Code:
select f.IDMOTask, f.IDEmployeeMachineTool, f.ResourceType  from CPRImputationMO f
inner join CPRMOTask g on f.IDMOTask = g.IDMOTask
inner join _CPRUsualTaskSTR_Custom h on g.IDUsualTask = h.IDUsualTask
where h.AuswertungRelevant = 1 and f.resourcetype = 1
group by  f.IDMOTask, f.IDEmployeeMachineTool, f.ResourceType

Das Zwischenergebnis sieht dann so aus:
IDMOTaskIDEmployeeMachineToolResourceType
FräsenMaschine11
FräsenMaschine21
DrehenMaschine11
FräsenMaschine31
SchneidenMaschine11

Anschließend gruppiere ich nochmal und möchte folgendes Ergebnis haben:
IDMOTaskAnzahlMaschinen
Fräsen3
Drehen1
Schneiden1

Wie mache ich das? Danke für Rückinfo und eure Unterstützung.
 
Werbung:
ohne jetzt das nachvollziehen zu können, weil Tabellen & Daten fehlen ...


Du hast ein Zwischenergebniss, aus dem brauchst Du eigentlich nur :

select IDMOTask, count(distinct IDEmployeeMachineTool) from (insert your query here) group by IDMOTask;

*untested*, aber das wäre so wohl der Weg zum Ziel ...
 
Leider ist das noch nicht die Lösung. Damit bekomme ich einen Syntaxfehler:
Code:
select IDMOTask, count(distinct IDEmployeeMachineTool)
from
(select f.IDMOTask, f.IDEmployeeMachineTool, f.ResourceType  from CPRImputationMO f
inner join CPRMOTask g on f.IDMOTask = g.IDMOTask
inner join _CPRUsualTaskSTR_Custom h on g.IDUsualTask = h.IDUsualTask
where h.AuswertungRelevant = 1 and f.resourcetype = 1
group by  f.IDMOTask, f.IDEmployeeMachineTool, f.ResourceType
)
group by IDMOTask

Die Ausgangsdaten sind:
ImputationDateIDMOTaskIDEmployeeMachineToolResource Type
14.05.22DrehenMaschine11
14.05.22DrehenMaschine21
15.04.22FräsenMaschine11
15.03.22DrehenMaschine21
 
Wäre ganz interessant zu wissen was für einen Fehler du bekommst

ich denke mal der fehlende alias für den subsequent wird angemeckert….
 
Meldung 156, Ebene 15, Status 1, Zeile 9
Falsche Syntax in der Nähe des group-Schlüsselworts.

Ja, tolle Wurst, oder?

Wenn ich das mal kurz mit PostgreSQL simuliere;

Code:
postgres=# select * from (select 1);
ERROR:  subquery in FROM must have an alias
LINE 1: select * from (select 1);
                      ^
HINT:  For example, FROM (SELECT ...) [AS] foo.
postgres=# select * from (select 1) foo;
 ?column? 
----------
        1
(1 row)

postgres=#
 
versuch doch mal zu verstehen, was ich zuletzt gezeigt habe. Da kommt ein ERROR was falsch ist und ein HINT, was zu tun ist.
Im zeiten Versuch habe ich den HINT umgesetzt - und die Abfrage funktioniert. Komm, das bekommst Du auch hin ...
 
Werbung:
Gelöst. der fehlende Alias war das Problem.. damit funktionierts. danke :)
Code:
select IDMOTask, count(distinct IDEmployeeMachineTool)
from
(select f.IDMOTask, f.IDEmployeeMachineTool, f.ResourceType  from CPRImputationMO f
inner join CPRMOTask g on f.IDMOTask = g.IDMOTask
inner join _CPRUsualTaskSTR_Custom h on g.IDUsualTask = h.IDUsualTask
where h.AuswertungRelevant = 1 and f.resourcetype = 1
group by  f.IDMOTask, f.IDEmployeeMachineTool, f.ResourceType
) as t
group by IDMOTask
 
Zurück
Oben