Vybrat: Shrnout hodnoty a skupiny podle data

hlasů
-1

Takže mým cílem je, aby součet své hodnoty a skupiny podle data.

Zpočátku jsem prostě napsal ho s datem stanoveným ale musím poskytnout SUMs YY-MM-DD, YY-MMa YYYYve formátu.

SELECT Table1.Date, Concat(Round(SUM((ISNULL(Price.Morning,0) + ISNULL(Price.Day,0) + ISNULL(Price.Evening,0))*Tickets.count),2),' €') AS 'Total' 
FROM Table1
JOIN Tickets ON Tickets.Table1_ID = Table1.Table1_ID
JOIN Price ON Tickets.Price_ID = Price.Price_ID 
GROUP BY Table1.Date
;

A to vypadá takto:

A

A teď jsem se dostal tak daleko, jak to:

SELECT Cast(Tabl1.Date as Date) AS 'Date', Concat(Round(SUM((ISNULL(Price.Morning,0) + ISNULL(Price.Day,0) + ISNULL(Price.Evening,0))*Tickets.Count),2),' €') AS 'Total'
FROM Table1
JOIN Tickets ON Tickets.Table1_ID = Table1.Table1_ID
JOIN Price ON Tickets.Price_ID = Price.Price_ID
GROUP BY Date;

A já si to:

A

Veškerý ...Concat(Round(SUM((ISNULL(Price.Morning,0) + ISNULL(Price.Day,0) + ISNULL(Price.Evening,0))*Tickets.Count),2),' €') AS 'Total'...je nutné, protože v databázi existují NULLhodnoty, to je důvod, proč jsem použít ISNULLfunkci a 0v případě, že je to NULLproto, že jinak se rozbije všechny výpočty.

Můžete vidět, že tabulka se zde:

Toto

Položena 07/11/2018 v 23:32
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
1

Problém je v tom, že GROUP BY Dateje seskupení, které Datesloupce v tabulce, nikoli Datealias. Změňte jej na:

GROUP BY DATE(Date)
Odpovězeno 08/11/2018 v 00:15
zdroj uživatelem

hlasů
0

Modifikovaný dotazu (mění IsNull na IfNull) a skupina by k datu jako:

SELECT DATE(Table1.Date) myDate, Concat(Round(SUM((IFNULL(Price.Morning,0) + IFNULL(Price.Day,0) + IFNULL(Price.Evening,0))*Tickets.count),2),' €') AS 'Total' 
FROM Table1
JOIN Tickets ON Tickets.Table1_ID = Table1.Table1_ID
JOIN Price ON Tickets.Price_ID = Price.Price_ID 
GROUP BY myDate;
Odpovězeno 08/11/2018 v 00:25
zdroj uživatelem

hlasů
0

Můžete získat něco jako to, co chcete pomocí GROUP BY WITH ROLLUP. Bez vzorku dat je těžké být 100% jistý, ale tento dotaz by měl fungovat. Všimněte si, že můžete použít COALESCEk výběru nenulovou hodnotu v cenách, aniž by za použití IFNULLna každém z nich.

SELECT YEAR(Table1.Date) AS year
     , MONTH(Table1.Date) AS month
     , DAY(Table1.Date) AS day
     , Round(SUM(COALESCE(Price.Morning, Price.Day, Price.Evening) * Tickets.count), 2) AS 'Total' 
FROM Table1
JOIN Tickets ON Tickets.Table1_ID = Table1.Table1_ID
JOIN Price ON Tickets.Price_ID = Price.Price_ID 
GROUP BY year, month, day WITH Rollup

To by mělo dát tabulku, která vypadá nějak takto:

year    month   day     Total
2017    7       24      476.00
2017    7       26      1992.20
2017    7       30      877.50
2017    7               3345.70
2017    8       2       2362.40
2017    8               2362.40
2017                    5708.10
                        5708.10
Odpovězeno 08/11/2018 v 00:23
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more