2016-05-29 16 views
1

erwartet habe ich SQL-Abfrage wie folgt aus:Oracle GROUP BY nicht wie

SELECT Z.ID, 
     Z.ZADAVATEL, 
     Z.DATUM_ZADANI, 
     Z.LIN_OBL, 
     Z.DRUH_ZMENY, 
     Z.CISLO_ZMENY, 
     Z.PRILOHY 
FROM ZMENY Z 
     JOIN ZMENY_DILY ZD 
     ON (ZD.ID_ZMENY=Z.ID) 
WHERE 1=1 %sql 
ORDER BY Z.ID DESC %lmt%ofs 

Tabelle Zmeny hat 9 Zeilen, ZMENY_DILY hat 11 Zeilen. Das Problem ist ich 11 Zeilen als Ergebnis erhalten, aber zwei von ihnen sind doppelte Zeilen, und ich versuche, diese beiden Duplikate loszuwerden, habe ich versucht,

GROUP BY Z.ID 

leider Oracle sagt zu verwenden: ORA-00979: nicht ein GROUP BY-Ausdruck

Ich bin nicht viel in Oracle, MySQL hätte kein Problem, ich denke ... irgendwelche Tipps?

+0

Zuerst sollten Sie identifizieren, was diese zwei zusätzlichen Zeilen darstellen. Angenommen, jeder Eintrag von 'ZMENY' hat eine übereinstimmende Zeile in' ZMENY_DILY' und zwei Einträge haben eine zusätzliche Zeile - was bedeuten diese zusätzlichen Zeilen? Beantworte diese Frage und ich bin mir sicher, die Antwort auf deine Frage wird direkt auf dich überspringen. – TommCatt

Antwort

1

Sie brauchen keine Gruppe in diesem Fall können Sie mit select distinct

SELECT distinct 
    Z.ID, 
    Z.ZADAVATEL, 
    Z.DATUM_ZADANI, 
    Z.LIN_OBL, 
    Z.DRUH_ZMENY, 
    Z.CISLO_ZMENY, 
    Z.PRILOHY 
FROM ZMENY Z JOIN ZMENY_DILY ZD ON (ZD.ID_ZMENY=Z.ID) 
ORDER BY Z.ID DESC %lmt%ofs 
+0

Die Verwendung von DISTINCT hat diesen Fehler verursacht: ORA-00932: inkonsistente Datentypen: erwartet - CLOB erhalten – VespaQQ

+0

Sie können keinen CLOB in die WHERE-Klausel einfügen. Stellen Sie sicher, dass Sie keinen cblog bei sich haben. – scaisEdge

+0

yeah, das Problem war in SELECT ... Ich musste die Funktion to_char auf CLOB-Spalten :) Danke !! – VespaQQ

0

Sie select distinct verwenden können, vorausgesetzt, alle Spalten sind Duplikate:

SELECT DISTINCT Z.ID, Z.ZADAVATEL, Z.DATUM_ZADANI, Z.LIN_OBL, 
     Z.DRUH_ZMENY, Z.CISLO_ZMENY, Z.PRILOHY 
FROM ZMENY Z JOIN 
    ZMENY_DILY ZD 
    ON ZD.ID_ZMENY = Z.ID 
WHERE 1=1 -- %sql ??? 
ORDER BY Z.ID DESC; 

Alternativ können Sie IN verwenden :

SELECT z.* 
FROM ZMENY Z 
WHERE Z.ID IN (SELECT ID_ZMENY FROM ZMENY_DILY ZD) 
ORDER BY Z.ID DESC; 
+0

Verwendung von DISTINCT warf dies: ORA-00932: inkonsistente Datentypen: erwartet - bekam CLOB .... IN-Klausel das gleiche zurückgegeben – VespaQQ