sql >> Database >  >> RDS >> Oracle

Toon gegevens uit de tabel, zelfs als er geen gegevens zijn!! Orakel

Ten eerste klinkt het alsof uw toepassing baat zou hebben bij een kalendertabel. Een kalendertabel is een lijst met data en informatie over de data.

Ten tweede kunt u dit doen zonder tijdelijke tabellen te gebruiken. Hier is de aanpak:

with constants as (select min(thedate>) as firstdate from <table>)
     dates as (select( <firstdate> + rownum - 1) as thedate
               from (select rownum
                     from <table> cross join constants
                     where rownum < sysdate - <firstdate> + 1
                    ) seq
              )
select dates.thedate, count(t.date)
from dates left outer join
     <table> t
     on t.date = dates.thedate
group by dates.thedate

Hier is het idee. De aliasconstanten registreren de vroegste datum in uw tabel. De alias datums creëert vervolgens een reeks datums. De binnenste subquery berekent een reeks gehele getallen met behulp van rownum en voegt deze vervolgens toe aan de eerste datum. Let op:hierbij wordt ervan uitgegaan dat u gemiddeld minimaal één transactie per datum heeft. Zo niet, dan kun je een grotere tafel gebruiken.

Het laatste deel is de join die wordt gebruikt om informatie over de datums terug te brengen. Let op het gebruik van count(t.date) in plaats van count(*). Dit telt het aantal records in uw tabel, dat 0 zou moeten zijn voor datums zonder gegevens.



  1. lavaral 5 FOUT{ (SQLSTATE [HY000] [1045] Toegang geweigerd voor gebruiker 'root'@'localhost' (met wachtwoord:JA)}

  2. Sporen 3.1. Heroku PGError:operator bestaat niet:karakter variërend =geheel getal

  3. Importeer .frm- en .opt-bestanden naar MySQL

  4. ODBC gebruiken met Salesforce en Azure Active Directory (AD) Single Sign On (SSO)