Poslední příspěvky

Stran: 1 ... 8 9 [10]
91
Firebird a Interbase / Re:View - nemôže obsahovať výraz *1E0
« Poslední příspěvek od pepak kdy 05-06-2017, 09:14:54 »

Citace
A dál máš blbě tu sumu, už jsem tě na to upozorňoval ve vedlejším vlákně.
Ja tam nič zlé nevidím. Nechytám sa :(
Mimo SUM() mohou být pouze konstanty. SERVICEPARAMETERS.PERCENT1 není konstanta.

Citace
Takže dávam minimum:
Kód: [Vybrat]
SELECT SUM(INVOICEINCOMINGITEMS.NUMBER) * SERVICEPARAMETERS.PERCENT1 * 1E0/ 100 AS NUMBER1
FROM
  INVOICEINCOMINGITEMS
  RIGHT OUTER JOIN SERVICEPARAMETERS ON (INVOICEINCOMINGITEMS.FKSERVICEPARAMETERS = SERVICEPARAMETERS.IDSERVICEPARAMETERS)
1) Proč RIGHT OUTER JOIN?
2) A zde je důkaz mého tvrzení výše: Ke každému záznamu z INVOICEINCOMINGITEMS bude použit jiný záznam z SERVICEPARAMETERS.

Citace
Zbehne bez problémov. Vygenerovaný pohľad [...]
a chyba
Kód: [Vybrat]
There is an error in entry field "View body"

To na mě dělá dojem, že zápis toho pohledu probíhá nějak blbě. Taková chyba by normálně vůbec vzniknout neměla. A když si vezmu tvoje SQL a předělám to na svoje tabulky, tak ji taky nedostanu, VIEW mi normálně funguje. Jak přesně dostaneš ten VIEW do databáze? Zkus si ho založit z ISQL.EXE.

Citace
Ako som písal, bez toho *1E0 to ide. Mám to kvôli tomu, že v prípade ak súčin súčtu a poľa bude menší ako 100, tak výsledok dostanem null.
Viď 10/3 = 0, ale 10*1E0/3 = 0,3...
To jako vážně?
Kód: SQL [Vybrat]
  1. SELECT 10/3 FROM rdb$database
  2. -- výsledek = 3
Každopádně takhle bych to nedělal, funkčnost ti závisí na tom, v jakém pořadí ti proběhnou konverze - a to se může mezi verzemi databáze měnit. Když už chceš dvě čísla dělit jako desetinná čísla, tak si tu konverzi udělej explicitně:
Kód: SQL [Vybrat]
  1. SELECT CAST(10 AS DOUBLE PRECISION)/3 FROM rdb$database
  2. -- výsledek = 3.333...
92
Firebird a Interbase / Re:View - nemôže obsahovať výraz *1E0
« Poslední příspěvek od Stanislav Hruška kdy 05-06-2017, 09:01:18 »

Citace
A dál máš blbě tu sumu, už jsem tě na to upozorňoval ve vedlejším vlákně.
Ja tam nič zlé nevidím. Nechytám sa :(
Takže dávam minimum:
Kód: [Vybrat]
SELECT SUM(INVOICEINCOMINGITEMS.NUMBER) * SERVICEPARAMETERS.PERCENT1 * 1E0/ 100 AS NUMBER1
FROM
  INVOICEINCOMINGITEMS
  RIGHT OUTER JOIN SERVICEPARAMETERS ON (INVOICEINCOMINGITEMS.FKSERVICEPARAMETERS = SERVICEPARAMETERS.IDSERVICEPARAMETERS)
  INNER JOIN SERVICES ON (SERVICEPARAMETERS.FKSERVICES = SERVICES.IDSERVICES)
WHERE
  SERVICES.FKFOCS = 1776 AND SERVICEPARAMETERS.PERIOD = 2016 AND SERVICEPARAMETERS.FKCATEGORY = 2 AND
  INVOICEINCOMINGITEMS.ISCOST = 1 AND INVOICEINCOMINGITEMS.DATEFROM BETWEEN '1.1.2016' AND '31.12.2016'
GROUP BY SERVICEPARAMETERS.PERCENT1
Zbehne bez problémov. Tak to mám aj v Delphi a nie je problém. Vygenerovaný pohľad
Kód: [Vybrat]
CREATE VIEW NEW_VIEW (
    NUMBER1)
AS
SELECT
  SUM(INVOICEINCOMINGITEMS.NUMBER) * SERVICEPARAMETERS.PERCENT1 * 1E0/ 100 AS NUMBER1
FROM
  INVOICEINCOMINGITEMS
  RIGHT OUTER JOIN SERVICEPARAMETERS ON (INVOICEINCOMINGITEMS.FKSERVICEPARAMETERS =
    SERVICEPARAMETERS.IDSERVICEPARAMETERS)
  INNER JOIN SERVICES ON (SERVICEPARAMETERS.FKSERVICES = SERVICES.IDSERVICES)
WHERE
  SERVICES.FKFOCS = 1776 AND SERVICEPARAMETERS.PERIOD = 2016 AND SERVICEPARAMETERS.FKCATEGORY = 2 AND
  INVOICEINCOMINGITEMS.ISCOST = 1 AND INVOICEINCOMINGITEMS.DATEFROM BETWEEN '1.1.2016' AND '31.12.2016'
GROUP BY SERVICEPARAMETERS.PERCENT1;
a chyba
Kód: [Vybrat]
There is an error in entry field "View body"Ako som písal, bez toho *1E0 to ide. Mám to kvôli tomu, že v prípade ak súčin súčtu a poľa bude menší ako 100, tak výsledok dostanem nulu.
Viď 10/3 = 0, ale 10*1E0/3 = 0,3...
93
Firebird a Interbase / Re:View - nemôže obsahovať výraz *1E0
« Poslední příspěvek od pepak kdy 05-06-2017, 08:29:44 »
Každopádně mě následující dotaz v pohodě funguje i v pohledu:
Kód: SQL [Vybrat]
  1. CREATE VIEW xxx (cislo)
  2. AS
  3. SELECT SUM(nejake_pole)*1e0/100
  4. FROM nejaka_tabulka
  5. GROUP BY jine_pole
Takže pokud budeš mít problémy i poté, co předěláš tu sumu, tak napiš celý SELECT a celou definici VIEW, jak jsem tě výše žádal. Bez toho není možný jiný závěr, než že jsi to napsal blbě.
94
Firebird a Interbase / Re:View - nemôže obsahovať výraz *1E0
« Poslední příspěvek od pepak kdy 05-06-2017, 08:25:56 »
A dál máš blbě tu sumu, už jsem tě na to upozorňoval ve vedlejším vlákně.
95
Firebird a Interbase / Re:View - nemôže obsahovať výraz *1E0
« Poslední příspěvek od pepak kdy 05-06-2017, 08:25:04 »
Pro začátek by bylo nejjednodušší se toho 1e0 úplně zbavit, protože to je jen jinak vyjádřená jednička a násobení jedničkou je mnohdy zbytečné.
96
Firebird a Interbase / Re:View - nemôže obsahovať výraz *1E0
« Poslední příspěvek od Stanislav Hruška kdy 05-06-2017, 08:09:29 »

Citace
Uveď celý SELECT a celou definici VIEW. Podle mě zjistíš, že máš ve VIEW jiný počet polí než kolik vrací SELECT.
To som si niekoľkokrát s nervami preveril :)  Doslova stačilo vyhodiť všetky výskyty daného člen a išlo to. Na ukážku jedno počítané pole:
Kód: [Vybrat]
SUM(INVOICEINCOMINGITEMS.NUMBER) * SERVICEPARAMETERS.PERCENT1*1E0 / 100 NUMBER1,Mňa zarážala už skutočnosť, že keď som so SELECT-u dal v EMS SQL Manger-i generovať pohľad, tak vytvoril telo pohľadu a vždy vyhodil chybu. A stále na nej trval. Aj keď som pohľad vytváral ručne.
Preto neviem či je chyba v manažéri, alebo je to vlastnosť FB.
97
Firebird a Interbase / Re:View - nemôže obsahovať výraz *1E0
« Poslední příspěvek od pepak kdy 05-06-2017, 07:49:25 »
Uveď celý SELECT a celou definici VIEW. Podle mě zjistíš, že máš ve VIEW jiný počet polí než kolik vrací SELECT.
98
Firebird a Interbase / View - nemôže obsahovať výraz *1E0
« Poslední příspěvek od Stanislav Hruška kdy 04-06-2017, 22:29:28 »
V SELECT-e to zbehne a po vytvorení view to padne na chybu v zozname výstupných polí. V praxi to priamo nepotrebujem, ale pri experimentovaní/hľadaní chyby to so mnou poriadne zacvičilo.
99
Aha. Ďakujem.
100
Firebird a Interbase / Re:Prečo musí byť člen násobenia/delenia a pod. v GROUP BY
« Poslední příspěvek od pepak kdy 03-06-2017, 15:45:57 »
A ze kterého konkrétního řádku by jsi vzal to Field2?
Stran: 1 ... 8 9 [10]