Ich habe eine Tabelle mit der folgenden Struktur.Cant herauszufinden, Self Join Abfrage
+-----------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+--------------+------+-----+---------+-------+
| linq_order_num | char(32) | NO | PRI | NULL | |
| order_status_id | int(11) | YES | MUL | NULL | |
| order_id | varchar(100) | YES | | NULL | |
| item_name | varchar(120) | YES | | NULL | |
| item_cost | float | YES | | NULL | |
| custmer_id | int(11) | YES | MUL | NULL | |
| order_date_time | datetime | YES | | NULL | |
| order_category | varchar(120) | YES | | NULL | |
| ordered_by | int(11) | YES | MUL | NULL | |
| linq_shipping_cost | float | YES | | NULL | |
| website_shipping_cost | float | YES | | NULL | |
| total_cost | float | YES | | NULL | |
| advance_amount | float | YES | | NULL | |
| website | varchar(120) | YES | | NULL | |
| other | varchar(120) | YES | | NULL | |
| rvn | int(11) | YES | | NULL | |
| received_date | datetime | YES | | NULL | |
| delivered_date | datetime | YES | | NULL | |
| store_id | int(11) | YES | MUL | NULL | |
+-----------------------+--------------+------+-----+---------+-------+
Also für jeden Tag muss ich die Gesamtauftragskosten finden. Ich kann es mit dieser Abfrage erhalten.
select sum(total_cost), date_format(order_date_time,"%Y-%m-%d") from
order_item group by date_format(order_date_time,"%Y-%m-%d")
Auch ich brauche den gesamten Restbetrag bezahlt zu den gelieferten Daten.
select sum(total_cost-advance_amount),date_format(delivered_date,"%Y-%m-%d")
from order_item group by date_format(delivered_date,"%Y-%m-%d")
Nicht alle Tage, Aufträge geschehen und nicht alle Tage Lieferungen happen.If es keine Aufträge sollten die Gesamtkosten für diesen Tag als Null und die Gesamt gezeigt verbleibende Betrag sein sollte gezeigt Tag Summe von (total_cost-advance_amount) für den Tag.
Gibt es eine Möglichkeit, die beiden obigen Abfragen in einer Abfrage zu kombinieren und das Ergebnis zu erhalten?
So für einen bestimmten Tag d zusammenfassen: Ich brauche Summe (total_cost), wo ordered_date_time d =, I Summe benötigen (total_cost -advance_amount), wo DELIVERED_DATE = d Wesentlichen für eine Tabelle wie folgt aussehen:
Date Total Cost Total Delivery Amounts
d 500 2000
d1 0 900
d2 900 0
Ich habe versucht, eine Unterabfrage zu verwenden. Das Problem ist es nicht, die Fälle für d1 anzuzeigen, wo die Gesamtkosten für diesen Tag 0 ist
Abfrage:
select
date_format(order_date_time,"%Y-%m-%d") date,
sum(total_cost) total,
sum(advance_amount) advance_amount,
IFNULL((select sum(total_cost-advance_amount)
from order_item a
where date_format(a.delivered_date,"%Y-%m-%d") = date_format(d.order_date_time,"%Y-%m-%d")),0) delivery_amount
from order_item d
group by date_format(order_date_time,"%Y-%m-%d"), delivery_amount
Verwenden Sie in der Zukunft nicht 'describe', um Ihr Tabellenschema zu dokumentieren. Verwenden Sie 'show create table order_item'. Beschreiben ist praktisch nutzlos für jeden zu verwenden – Drew