Autor Téma: Prevod riadkov na stĺpce - nemám všetko čo chcem  (Přečteno 2871 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Kód: [Vybrat]

SELECT DISTINCT
...
  SUM(CASE WHEN D.FKSERVICEPARAMETERS = 1879 THEN D.DEPOSIT ELSE 0 END) AS FIELD17,
  SUM(CASE WHEN D.FKSERVICEPARAMETERS = 1693 THEN D.DEPOSIT ELSE 0 END) AS FIELD18,
  SUM(CASE WHEN D.FKSERVICEPARAMETERS = 16861 THEN D.DEPOSIT ELSE 0 END) AS FIELD19,
  SUM(CASE WHEN D.FKSERVICEPARAMETERS = 16937 THEN D.DEPOSIT ELSE 0 END) AS FIELD20,
  OWF.IDOWNER_FLAT,
  D.IDDEPOSITS,
  SP.PRIORITY,
  EXTRACT(MONTH FROM D.DEPOSITPERIOD) AS MYMONTH,
  D.DEPOSITPERIOD,
  SP.IDSERVICEPARAMETERS
FROM
  SERVICEPARAMETERS SP
  LEFT OUTER JOIN DEPOSITS D ON (SP.IDSERVICEPARAMETERS = D.FKSERVICEPARAMETERS)
  INNER JOIN OWNER_FLAT OWF ON (D.FKOWNER_FLAT = OWF.IDOWNER_FLAT)
  INNER JOIN SERVICES S ON (S.IDSERVICES = SP.FKSERVICES)
GROUP BY OWF.IDOWNER_FLAT, D.IDDEPOSITS, SP.PRIORITY, EXTRACT(MONTH FROM D.DEPOSITPERIOD), D.DEPOSITPERIOD, SP.IDSERVICEPARAMETERS
HAVING OWF.IDOWNER_FLAT = 1835 AND D.DEPOSITPERIOD = '1.9.2016'
Posledné tri FKSERVICEPARAMETERS 1693, 16861, 16937 nie sú v tabuľke DEPOSITS. Ja ich tam potrebujem.
LEFT OUTER JOIN mi to nevyriešil.
Prikladám aj grafickú podobu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #1 kdy: 14-12-2018, 17:32:49 »
Upresňujem, že všade mám použité SP.IDSERVICEPARAMETERS a nie D.FKSERVICEPARAMETERS
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #2 kdy: 14-12-2018, 18:32:28 »
Pripadám si akoby som v živote neurobil ani jedno SQL. NULL mi nezobrazí ani toto
Kód: [Vybrat]
SELECT
  D.FKSERVICEPARAMETERS
FROM
  SERVICEPARAMETERS SP
  INNER JOIN SERVICES S ON (SP.FKSERVICES = S.IDSERVICES)
  LEFT OUTER JOIN DEPOSITS D ON (SP.IDSERVICEPARAMETERS = D.FKSERVICEPARAMETERS)
WHERE
  S.FKFOCS = 1776 AND
  SP.PERIOD = 2016
ORDER BY
  SP.IDSERVICEPARAMETERS
To už vôbec nerozumiem prečo. Veď sa to už jednoduchšie urobiť nedá
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #3 kdy: 14-12-2018, 18:47:26 »
K požadovanému výsledku som sa dostal, až keď som si vytvoril pohľady z vyfiltrovanými záznamami. Nikdy neviem odhadnúť kedy mám robiť subselect/pohľad a kedy nie.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #4 kdy: 14-12-2018, 18:53:56 »
Hovno, keď tam dám celý výber tak je to zas o ničom.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #5 kdy: 14-12-2018, 19:09:03 »
Som celkom mimo. Ak idem v pohľade pre Deposit po jednotlivých mesiacoch (DepositPeriod), tak dostávam správne výsledky. Ináč nie. Vôbec nerozumiem prečo.
Vie mi to niekto vysvetliť?


Skladať to po jednotlivých mesiacoch sa mi akosi nechce. Prieči sa mi to. Nie je to z môjho pohľadu čisté. Ale ak si ináč povedať nedá ...
« Poslední změna: 14-12-2018, 19:11:44 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #6 kdy: 14-12-2018, 19:36:03 »

To SQL používam ako skratku pre dopyty.

Kód: [Vybrat]
SELECT DISTINCT  ID_DEP.IDDEPOSITS,  ID_DEP.FKSERVICEPARAMETERS,  ID_DEP.FKOWNER_FLAT,  ID_DEP.DEPOSIT,
  ID_DEP.DEPOSITPERIOD,  ID_SP.IDSERVICEPARAMETERS
FROM  ID_DEP
  FULL OUTER JOIN ID_SP ON (ID_DEP.FKSERVICEPARAMETERS = ID_SP.IDSERVICEPARAMETERS)
Toto nemením.
Kód: [Vybrat]
CREATE VIEW ID_DEP(IDDEPOSITS, FKSERVICEPARAMETERS, FKOWNER_FLAT, DEPOSIT, DEPOSITPERIOD)
AS
SELECT DISTINCT D.IDDEPOSITS, D.FKSERVICEPARAMETERS, D.FKOWNER_FLAT, D.DEPOSIT, D.DEPOSITPERIOD
FROM DEPOSITS D
WHERE D.FKOWNER_FLAT = 1835 AND D.DEPOSITPERIOD = '1.9.2016';
V tomto prípade dostávam požadované. Viď obrázok a v ňom prvé tri riadky s null hodnotami. Ak vyhodím podmienku na dátum D.DEPOSITPERIOD = '1.9.2016', tak sa k null hodnotám nedopracujem. To je celý problém.



Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #7 kdy: 14-12-2018, 20:09:23 »
Citace
Je treba si uvedomit, ze NULL neni hodnota, ale stav
To viem, už som to pár ľuďom vysvetľoval.
Tvoj návrh výsledok nepriniesol.
Filtrovaný podľa dátumu musí byť už zdroj z ktorého sa ťahajú údaje "Deposit". Jedine tak sa dostanem k správnym výsledkom.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #8 kdy: 14-12-2018, 20:33:10 »
Pravdu povediac som zabudol na skutočnosť, že je rozdiel napísať podmienku do WHERE a JOIN. Aj keď so doteraz nepochopil prečo. Použil som
Kód: [Vybrat]
  RIGHT OUTER JOIN ID_SP ON (ID_DEP.FKSERVICEPARAMETERS = ID_SP.IDSERVICEPARAMETERS)
AND (ID_SP.IDSERVICEPARAMETERS IS NULL)
a dostal som naraz všetky záznamy s NULL. To znamená, že to už dám dokopy pomocou UNION.
Ďakujem
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #9 kdy: 14-12-2018, 23:21:02 »
Mám knihy o SQL. Jednu pekne hrubú. Ale žeby sa tam rozpisovali o tom, aký je rozdiel medzi podmienkami v JOIN a WHERE tak to nie. Niečo som už zistil. Odkaz si pozrem.
Tešil som sa predčasne. Dostávam záznamy s NULL, ktoré tam nemajú byť. Ešte sa tým potrápim. Vidím to tak, že to budem musieť urobiť na viac krokov. A len v DB to nezvládnem.

Len stručný popis stavu a čo chcem.
Každý vlastník bytu má na služby vystavené predpisy. To je u mňa tabuľka DEPOSITS
- obdobie vlastnenia bytu nemusí byť počas celého roka. To kopírujú predpisy.
- v tabuľke DEPOSITS nemusia byť všetky služby
- v tabuľke DEPOSITS môžu byť služby len v niektorých mesiacoch


Hovädo jedno. Nepozrel som sa, že nepodporuje csv a zmazal mi zyšok príspevku. Už druhýkrát. :'(
Takže v krátkosti. Výsledkom má byť tabuľku kde služby budú hlavička, mesiace riadky a predpisy v bunkách. Vystavené - nulové - nevystavené/neexistujúce. Tie údaje potrebujem dostať do "riadkovej" tabuľky v štruktúre IDDEPOSITS,  IDSERVICEPARAMETERS, DEPOSIT a DEPOSITPERIOD.
K tomu ešte mám tabuľku predpisov SERVICEPARAMETERS. Z oboch tabuliek som priložil export csv premenovaný na txt. Okrem FKOWNER_FLAT = 1835 netreba údaje filtrovať. Viac k tomu nič nemám.
Kód: [Vybrat]

CREATE TABLE DEPOSITS (
  IDDEPOSITS PRIMARYKEY NOT NULL,
  FKFOCS FOREIGNKEY NOT NULL,
  FKOWNER_FLAT FOREIGNKEY NOT NULL,
  FKSERVICEPARAMETERS FOREIGNKEY NOT NULL,
  DEPOSIT CURRENCY DEFAULT '0.0' NOT NULL,
  DEPOSITPERIOD DATEFROM NOT NULL,
  PAY CURRENCY DEFAULT 0 NOT NULL);
Dobrú noc!


Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #10 kdy: 14-12-2018, 23:30:39 »
Jaj ešte niečo. Pri prevode na stĺpce mi dopyt doplní niektoré chýbajúce údaje. Ale nie kompletne. Ak bude záujem, tak môžem zajtra poslať čo mám a čo potrebujem.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2580
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #11 kdy: 15-12-2018, 07:55:58 »
Excellent
Rated 1 time
Mám knihy o SQL. Jednu pekne hrubú. Ale žeby sa tam rozpisovali o tom, aký je rozdiel medzi podmienkami v JOIN a WHERE tak to nie.
Nevim jak v knihach, ale mam pocit, ze kdykoli narazim na cokoli o joinovani, ze to tam vice ci mene podrobne vysvetluji ev. ilustruji priklady. ted jsem namatkou vygooglil
https://community.modeanalytics.com/sql/tutorial/sql-joins-where-vs-on/

Jinak pro pomoc ev. hrani si s SQL dotazy se pouzivaji fiddlery, ktere samozrejme pro tebe predstavuji praci na vic, ale donuti te vytvorit kompletni priklad problemu vcetne dat a das tak sanci i nekomu jinemu se zabyvat tvym problemem viz treba sqlfiddle.com. Sice to neni pro ptaka ohnivaka, ale u rady problemu je to jedno a da se pouzit i jiny RDBMS.
« Poslední změna: 15-12-2018, 07:57:47 od pf1957 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #12 kdy: 15-12-2018, 09:18:29 »
Ďakujem obom. Ja si najpv idem urobiť poriadnu hĺbkovú nanalýzu toho čo vlastne vidím na obrazovke. Ja totiž pri napĺňaní stromu pridávam niektoré chýbajúce údaje ručne. Ja v skutočnosti neviem ako mi korenšpondujú so skutočnosťou :-[  Obrovská chyba. Žiaľ, to je pre mňa typické. Ale už to je lepšie než to bolo. Bola tam jedna chyba, ktorú som odstránil. Možno ani nie je čo riešiť.
Takže sa aj ospravedlňujem.
Citace
Jinak pro pomoc ev. hrani si s SQL dotazy se pouzivaji fiddlery, ktere samozrejme pro tebe predstavuji praci na vic,
Nejde o prácu navyšše. Ja som to kedysi skúšal s nulovým výsledkom. Hlavne kvôli FB.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #13 kdy: 15-12-2018, 10:39:57 »
Citace
navic obcas oponujes i vcelku vhodnym radam
Hm, to nie je pravda :)  Aj keď to tak vyznieva. Stáva sa mi to aj v bežnom v živote. Ja tak vlastne nahlas rozmýšľam. Mám vedomosti aké mám. Ľudia majú dojem, že niekoho zhadzujem, vysmievam sa, chcem sa hádať a pod :(  Pritom sledujem jedinú vec. Ísť viac do hĺbky a viac sa dozvedieť. Či si to sám sebe vyjasniť.
Ja som vždy rozmýšľal nejako ináč než ostatní ľudia. Veľmi často ma nechápu. Zvyčajne to dokážem vysvetliť. Aj preto tvrdím, že som nikdy nebol normálny.
A teraz do analýzy.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #14 kdy: 15-12-2018, 12:56:00 »
Takže po analýze je jasné, že dopyt je v poriadku. Zle je jeho spracovanie. Ale vďaka analýze ho vidím. Keď mňa tie analýzy prestali baviť. Nič iné nerobím.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4341
  • Karma: 38
    • Verze Delphi: XE7 professional
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #15 kdy: 18-12-2018, 16:50:23 »
Ten odkaz čo tu dal pf1957 je perfektný. Jednoducho polopate, zrozumiteľne a všetky možnosti využitia. S tým som sa ešte inde nestretol.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2580
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Prevod riadkov na stĺpce - nemám všetko čo chcem
« Odpověď #16 kdy: 18-12-2018, 19:21:49 »
Ten odkaz čo tu dal pf1957 je perfektný. Jednoducho polopate, zrozumiteľne a všetky možnosti využitia. S tým som sa ešte inde nestretol.
No, hledal jsem puvodne neco jineho, protoze nedavno jsem pri googleni kolem OUTER APPLY narazil na clanek, ktery mel spoustu zajimavych prikladu na pouziti On/Where, ale nenasel jsem. Misto nej na me vyskocil tenhle, tak jsem ti ho poslal. Ale tech clanku je skutecne cela rada.