Autor Téma: Podľa hodnoty stĺpca načítať údaj zo zodpovedajúcej tabuľky  (Přečteno 480 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3460
  • Karma: 35
    • Verze Delphi: XE7 professional
V jedinom SQL selecte môže hodnota stĺpcaX nadobudnúť null alebo niektorú z 3 hodnôt. Pre každú hodnotu potrebujem načítať údaj z inej tabuľky a použiť ho pre výpočet hodnoty stĺpca.
  • Definujem si 4 samostatné SQL. Zistím si hodnoty stĺpcaX a podľa potreby spustím požadované SQL
  • Definujem si jedno SQL zoradené podľa stĺpcaX. V cykle ho prechádzam záznam po zázname a postupne spracujem. Výsledky zapíšem naraz v dávke. Tento spôsob sa mi vôbec nepáči
  • Načítať si údaje naraz zo všetkých troch tabuliek, ako jeden subselect či pohľad, a pomocou CASE vyberiem požadovanú hodnotu.
Iný (teoretický) spôsob riešenia mi na um neprišiel. Výpočet je jednoduchý
Kód: [Vybrat]
CAST(ZnamaHodnota * "Tabulka1 až 3".Hodnota * NR.PRICEUNIT_VAT * SP.PERCENT2 AS DOUBLE PRECISION) / 100 COST2,
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2231
  • Karma: 117
    • Verze Delphi: D2007, XE3, DX10
V jedinom SQL selecte môže hodnota stĺpcaX nadobudnúť null alebo niektorú z 3 hodnôt. Pre každú hodnotu potrebujem načítať údaj z inej tabuľky a použiť ho pre výpočet hodnoty stĺpca.
  • Definujem si 4 samostatné SQL. Zistím si hodnoty stĺpcaX a podľa potreby spustím požadované SQL
  • Definujem si jedno SQL zoradené podľa stĺpcaX. V cykle ho prechádzam záznam po zázname a postupne spracujem. Výsledky zapíšem naraz v dávke. Tento spôsob sa mi vôbec nepáči
  • Načítať si údaje naraz zo všetkých troch tabuliek, ako jeden subselect či pohľad, a pomocou CASE vyberiem požadovanú hodnotu.
Iný (teoretický) spôsob riešenia mi na um neprišiel. Výpočet je jednoduchý
Kód: [Vybrat]
CAST(ZnamaHodnota * "Tabulka1 až 3".Hodnota * NR.PRICEUNIT_VAT * SP.PERCENT2 AS DOUBLE PRECISION) / 100 COST2,
A co podle hodnoty sloupceX pripojit outer joinem  jednu z Tabulek1 az 3 a k hodnote "Tabulka1 až 3".Hodnota se dostat koalici?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3460
  • Karma: 35
    • Verze Delphi: XE7 professional
Asi tuším ako to myslíš. Len nerozumiem čo myslíš pod pojmom "koalici". Snažím sa všetko robiť jedným razom. Tam je problém v tom, že môžem potrebovať hodnoty zo všetkých troch tabuliek naraz. A ako si vyberiem tú správnu?
Ja to vidím na to posledné riešenie. To mi prišlo na um až vo chvíli, keď som chcel odoslať príspevok.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2231
  • Karma: 117
    • Verze Delphi: D2007, XE3, DX10
Asi tuším ako to myslíš. Len nerozumiem čo myslíš pod pojmom "koalici".
coalesce

Offline vandrovnik

  • Hrdina
  • ****
  • Příspěvků: 472
  • Karma: 36
    • Verze Delphi: 10.2
V jedinom SQL selecte môže hodnota stĺpcaX nadobudnúť null alebo niektorú z 3 hodnôt. Pre každú hodnotu potrebujem načítať údaj z inej tabuľky a použiť ho pre výpočet hodnoty stĺpca.
  • Načítať si údaje naraz zo všetkých troch tabuliek, ako jeden subselect či pohľad, a pomocou CASE vyberiem požadovanú hodnotu.
Iný (teoretický) spôsob riešenia mi na um neprišiel. Výpočet je jednoduchý
Kód: [Vybrat]
CAST(ZnamaHodnota * "Tabulka1 až 3".Hodnota * NR.PRICEUNIT_VAT * SP.PERCENT2 AS DOUBLE PRECISION) / 100 COST2,

Pomocí LEFT OUTER JOIN bych si připojil všechny 3 tabulky.
Výpočet by pak byl něco jako:

Kód: [Vybrat]
CAST(ZnamaHodnota * (CASE
 WHEN stlpec=1 THEN Tabulka1.Hodnota
 WHEN stlpec=2 THEN Tabulka2.Hodnota
 WHEN stlpec=3 THEN Tabulka3.Hodnota
 ELSE NULL END) * NR.PRICEUNIT_VAT * SP.PERCENT2 AS DOUBLE PRECISION) / 100 COST2,

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 3460
  • Karma: 35
    • Verze Delphi: XE7 professional
Ja som to myslel nejako podobne. Len sa mi to komplikuje s tým, že ak:

Stlpec = Osoba - tak nepoznám dopredu počet druhov osôb. Asi to budem musieť riešiť pomocou SELECT. Osoby majú len jedno ID + IDPersonTypes.


Len ma tam celkom straší skutočnosť, že počet osôb pre každého vlastníka sa počas roka môže meniť. Samozrejme u každého ináč. To platí aj pre ostatné hodnoty.


Pre začiatok budem vychádzať z toho, čo tu dal vandrovnik. Nezabúdam ani na to čo napísal pf1957.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Křestní jméno zpěváka Gotta: