2016-03-30 12 views
0

I card_type Tisch haben, in denen es card_id ist auto_increment Schlüssel ist, und cardtpe ist primary key. Die andere Tabelle , die ich habe, ist activities Tabelle. Die columns in Aktivitäten Tabelle sind activity_id mit auto_increment Schlüssel und activity Spalte mit primary key. Die dritte Tabelle ist actual_alldetails Tabelle. Die Säulen in actual_alldetails sind id mit auto_increment Schlüssel und (emp_code,activity_id,card_id) Spalte mit composite key. Die vierte Tabelle ist employee Tabelle und Spalten in dieser Tabelle sind emp_code mit primary key und emp_name. wie Innen zu tun kommen mit zusammengesetzten Schlüssel

Wenn ich versuche, eine meiner Abfrage auszuführen: -

SELECT i.*, 
     d.Date, 
     a.in_time, 
     a.out_time, 
     SEC_TO_TIME(SUM(TIME_TO_SEC(a.out_time))-(TIME_TO_SEC(a.in_time))) AS duration, 
     c.cardtype, 
     a.wo, 
     v.activity, 
     a.quty, 
     a.wastage, 
     a.mcusage, 
     a.actual_wastage 
FROM employee_details i 
INNER JOIN actual_alldetails a ON i.emp_code=a.emp_code 
INNER JOIN attendance_date d ON d.date_id=a.date_id 
INNER JOIN card_type c ON c.card_id=a.card_id 
INNER JOIN activities v ON v.activity_id=a.activity_id 
WHERE d.Date='2016-01-30' 
ORDER BY v.activity; 

Es zeigt mir Fehler wie:

Mischen von GROUP Säulen (MIN(), MAX(), COUNT(), ...) ohne GROUP Spalten ist ungültig, wenn keine GROUP BY-Klausel vorhanden ist.

Ich verstehe nicht, warum es mir Fehler wie diese zeigen. Liegt es daran, dass ich innere Verbindung mit einem Primärschlüssel und einem zusammengesetzten Schlüssel mache? Wenn meine Vorhersage richtig ist, was ist die richtige Abfrage, um diese zu tun? Bitte helfen Sie mir, dieses Problem zu lösen.

Antwort

0

Schauen Sie näher an dieser Linie:

SEC_TO_TIME(SUM(TIME_TO_SEC(a.out_time))-(TIME_TO_SEC(a.in_time))) AS duration,

Es gibt eine SUM() Funktion hier die sehr ungerade und höchstwahrscheinlich löst Ihre Fehlermeldung aussieht. Versuchen Sie, die SUM zu entfernen.

1

Die Fehlermeldung heißt es:

Mischen von GROUP Säulen (MIN(), MAX(), COUNT(), ...) ohne GROUP Spalten illegal ist, wenn es keine GROUP BY-Klausel .

Sie haben eine select-Anweisung, die SUM(TIME_TO_SEC(a.out_time) und einen nicht aggregierten Wert TIME_TO_SEC(a.in_time)

ich, was das Ergebnis genau wissen nicht, einen aggregierten Wert enthält, wird Sie hoffen, für Sie aber entweder eine Aggregatfunktion anwenden auf den zweiten Wert oder Sie fügen eine Gruppe hinzu, wie die Fehlermeldung sagt, damit sie weiß, worauf sie sich gruppieren soll.

Zum Beispiel ändern die Abfrage folgendermaßen aus:

SELECT i.*, 
    d.Date, 
    a.in_time, 
    a.out_time, 
    SEC_TO_TIME(SUM(TIME_TO_SEC(a.out_time))-(TIME_TO_SEC(a.in_time))) AS duration, 
    c.cardtype, 
    a.wo, 
    v.activity, 
    a.quty, 
    a.wastage, 
    a.mcusage, 
    a.actual_wastage 
FROM employee_details i 
INNER JOIN actual_alldetails a ON i.emp_code=a.emp_code 
INNER JOIN attendance_date d ON d.date_id=a.date_id 
INNER JOIN card_type c ON c.card_id=a.card_id 
INNER JOIN activities v ON v.activity_id=a.activity_id 
WHERE d.Date='2016-01-30' 
GROUP BY i.emp_code 
ORDER BY v.activity; 

Ich vermute, bei dem id-Wert Ihrer Mitarbeiter: i.emp_code

Verwandte Themen