Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Rozdíl mezi dvěma sloupci dvou tabulek

Aktivity
Avatar
c.bohumil
Člen
Avatar
c.bohumil:10.1.2022 18:33

Ahoj, nejde mi vytvořit jedinečný sloupec kde bude rozdíl mezi dvěma hodnotami. Mám dvě tabulky a tři sloupce v každé. Den, Čas, kWh. Jedná se mi o hodnotu kWh.
Dokáže mi někdo pomoc?

Zkusil jsem: --CREATE VIEW [dbo].[DGR] AS

select
[dbo].[DGR_Da­ta].Den,
[dbo].[DGR_Da­ta].Čas,
[dbo].[DGR_Da­ta].kWh,

([dbo].[DGR_Da­ta].kWh - [dbo].[RE_Data]­.kWh) as "DIFERENCE"

from [dbo].[DGR_Data]
INNER JOIN [dbo].[RE_Data]
on [dbo].[DGR_Da­ta].Čas = [dbo].[RE_Data].Čas AND [dbo].[DGR_Da­ta].Den = [dbo].[RE_Data].Den
ORDER BY Den ASC --Řazení dle data

go
--alter table [dbo].[DGR_Data] alter column Čas datetime NULL -- Název tabulky - sloupce a datového typu
--alter table [dbo].[RE_Data] alter column Čas datetime NULL -- Název tabulky - sloupce a datového typu
--SET LANGUAGE Czech;

 
Odpovědět
10.1.2022 18:33
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11.1.2022 8:22

Nevim, co je tohle za sql podoba. Nejaka nestandartni. Vubec, cestina v sql zapisu nema, co delat
"nejde mi vytvořit jedinečný sloupec" - co to presne znamena?
Je zvlastni, ze tam davat INNERJOIN.
Jsi si jisty, ze hodnoty v obou tabulkach jsou validni? Ze je muzes vzajemne porovnavas? Stejny typ sloupce, spravna hodnota? Zadna treba prazdna mezera, stringy pro matematicke operace a podobne?

Takhle nejak bych to napsal v normalni db.

SELECT
    `a`.`Den`,
    `a`.`Čas`,
    `a`.`.kWh`,
    (`a`.`kWh` - `b`.`kWh`) AS `DIFERENCE`
FROM
    `DGR_Data` `a`
         LEFT JOIN `RE_Data` `b` ON `a`.`Čas` = `b`.`Čas` AND `a`.`Den` = `b`.`Den`
ORDER BY
     `a`.`Den` ASC

u te podminky joinu si ted nejsem jisty, zda
`a`.`Čas` = `b`.`Čas` AND `a`.`Den` = `b`.`Den` nebo
`b`.`Čas` = `a`.`Čas` AND `b`.`Den` = `a`.`Den`

Tez je zvlastni, ze tam neuvazujes vubec rok. A prave mi prijde divne, ze to mas takto, zavani mi to prave tim, ze tam mas stringy misto cisel.
Pise to nejakou chybu? Nebo, co to dela?

 
Nahoru Odpovědět
11.1.2022 8:22
Avatar
c.bohumil
Člen
Avatar
Odpovídá na Peter Mlich
c.bohumil:11.1.2022 18:35

Děkuji za reakci.
Data validní jsou a obě tabulky exportovány přes SaveToDB. Den je datetime (rok a měsíc) a mám to pojmenovaný jako den, protože se jedná jen o rok. Čas je 0-24h .S časem mám problém takový, že to nedokážu exportovat z SaveToDB jako time, ale jako (0,0416666666­666667) i za předpokladu, že v excelu formát čas je. Při napojení zpět na excel mi to čas ukazuje, tak to zatím neřeším. Jak mně a i Tobě to funguje stejně.U obou problém řazení ,nebo duplikaci. Vše 4x... Tvá vlevo, má vpravo.
Podmínky JOINU řeší stále stejný výstup.

Editováno 11.1.2022 18:37
 
Nahoru Odpovědět
11.1.2022 18:35
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:11.1.2022 19:21

No, u excelu bych nejakou spolehlivost hned vyloucil :) Ale, rekneme, ze dotaz vypsal, co vypsal a ze je to asi dobre.
Dobre, jinak, zapomen na join, uplne ten radek zrus. Co vypise dotaz bez join?. musi vypsat 4 radky. A pridej si tam id radku. Jestli se nepletu, tak mas v te puvodni tabulce 4 radky. Tos ale nerek, ze potrebujes poscitat 4 radky podle nejakeho, jakeho klice? Mohl jsi dat ten obrazek hned, by se to dalo vycist, kdyz to neumis napsat slovy :)

Slucovani radku se dela pres GROUP BY, s normalnim sql. Zadava se tam klic stejny pro slucovane 4 radky. Soucet se dela pres SUM.

SELECT
    `a`.`Den`,
    `a`.`Čas`,
    `a`.`.kWh`,
    SUM(`a`.`kWh`) AS `suma`
FROM
    `DGR_Data` `a`
GROUP BY
    `a`.`Den`,
    `a`.`Čas`
ORDER BY
     `a`.`Den` ASC
Editováno 11.1.2022 19:21
 
Nahoru Odpovědět
11.1.2022 19:21
Avatar
c.bohumil
Člen
Avatar
Odpovídá na Peter Mlich
c.bohumil:11.1.2022 19:27

Pro zajímavost ještě data s kterýma pracuji. Řazení podle ID není možné, protože se aktuálními daty RE_Data budou měnit. A 4 řádky právě nepotřebuji :-) to je špatně a proč to vypisuje čtyři řádky nemám zdání a ani podle čeho to vypočítává.

 
Nahoru Odpovědět
11.1.2022 19:27
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.1.2022 8:47

Neslo byto exportovat do csv, 100 radku z te tabulky 1, 2? A jeste teda to serad podle den ASC, cas ASC. Zatim tipuji, ze tam tu hodnotu mas skutecne 4x. Nebo za to muze ten join.

A v tom dotazu, jak mas order by, tak by tam melo byt ORDER BY A.Den ASC, A.Cas ASC

Tez je divne, proc u toho joinu mas prvni cas a ne datum. Ale, treba na poradi nesejde a funguje to rychleji, kdyz je cislo prvni nez string.

OFFSET 0 ROWS je dalsi priklad. Pokud to chces radkovat, tak

ORDER BY
    ...
OFFSET
    0 ROWS

Jak pocitas rozdil, a-b, tak si tam muzes nechat zobrazit dalsi sloupce, treba a.id, b.id. Neco, podle ceho jsi schopen zjistit, jake radky se vlastne srovnavaji. Pokud tam nemas id, tak musi stacit ty kwh, co uz tam mas, vidim.
Treba, pro ten prvni den tam mas
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=0
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=2 --- tyto hodnoty na tom obrazku nevidim
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=63 --- tyto hodnoty na tom obrazku nevidim
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=0
Takze ti nedokazi rict, proc tam jsou. Kdezto, kdybys mel id, tak id radku uz v tech tabulkach najdes a nemuze to byt zadna jina hodnota, pokud je id unikatni.

 
Nahoru Odpovědět
12.1.2022 8:47
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.1.2022 8:49

No, ale jestli tam mas skutecne 4 radky, tak to musis grupovat. Pokud jsou vsechny ty hodnoty platne a meli by se secit nebo neco tak. To uz jsem psal.

 
Nahoru Odpovědět
12.1.2022 8:49
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.1.2022 8:53

Cili, tohle bych provedl pro jednu i druhou tabulku. A tam by se melo ukazat, ze ty hodnoty tam jsou skutecne 4x. A bud je to chyba nebo to tam musi byt. To bys mel vedet ty.
Cili, prvnich 100 radku z tech serazenych tabulek.

SELECT
   `a`.`id`,
    `a`.`Den`,
    `a`.`Čas`,
    `a`.`.kWh`,
FROM
    `DGR_Data` `a`
ORDER BY
     `a`.`Den` ASC, `a`.`Čas` ASC
Editováno 12.1.2022 8:54
 
Nahoru Odpovědět
12.1.2022 8:53
Avatar
c.bohumil
Člen
Avatar
Odpovídá na Peter Mlich
c.bohumil:12.1.2022 18:00

Moje chyba a nepozornost :-/ Neuvědomil jsem si jednu zásadní věc a to, že sbírám data ze 4 tabulek...Takže to je důvod proč se datum opakoval 4x :-)
Každopádně vyřešeno díky Tobě. Děkuji

Rád bych se ještě optal. Zmiňoval csv. Ano, možnost exportu tu je. Je lepší pracovat s csv? Jsou kvalitnější?
Každý den musím stahovat 4 výrobny a sjednotit (sečíst) a dále najít rozdíly nominace a skutečnosti ( vše výše :-)
Je jiná automatizovaná metoda, než vše otvírat v excelu , zpracovat v Power Query a přes SaveToDB aktualizovat sql?

 
Nahoru Odpovědět
12.1.2022 18:00
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:12.1.2022 21:32

No, nenapsal jsi v dotazu, v jakou pouzivas databazi. Tech je asi 100 druhu. Pak se dost spatne googluje, co s tim.
Pak jsi zminil excel. Cili, mas nejspis nejaky nastroj, ktery umi pracovat s excelovym souborem. excel umi import / export z csv. Csv je textovy soubor zapisu dat jedne tabulky. Pouziva se to obcas pro import do databaze.

K cemu mi je csv? Kdybych mel tva data, tak si to muzu nasimulovat u sebe a vyzkouset si ty dotazy. Normalne by se mi to nechtelo, ale mas tam jen 3-4 sloupce :)
Poloz si jinou otazku? K cemu jsou nam obrazky? Pekne to videt. Ale z obrazku nemuzes udelat ctrl+c / v. Treba tam mas jakysi kod, sql dotaz, ten si nemuzeme zkopirovat a udelat v nem zmeny. Ale, museli by jsme to opsat. To se nam co? nechce. Pri opisovani snadno udelas chybu. Tak pak jako takovy dotaz ma 0 reakci, treba.

Prima, ze se na to prislo, ze to mas vlastne spravne. Tam pridej cislo tabulky, treba, jako jeden sloupec .

 
Nahoru Odpovědět
12.1.2022 21:32
Avatar
c.bohumil
Člen
Avatar
c.bohumil:13.1.2022 17:52

Ano. Máš pravdu. Obrázky jsou zkrátka jen obrázky :-)
No, stahuji data xls (excel) z Protagonu a exportuju je přes SaveToDB do SQL server 2019 a pak zpracovávám (nějak).
Pokud máš tedy chuť si to nasimulovat, čehož si vážím, tak přikládám data. A také dotazy.
Když to tak teď vidím, tak bych rád záporný rozdíl měl opět sečtený po dnu v dalším sloupci :-) Další přehledný sloupec.

--CREATE VIEW [dbo].[RE_Data_sloučení] AS


SELECT
    Den,
    Čas,
        --A.kWh as Dgr_kWh,

   SUM(kWh) AS suma

FROM

        [dbo].[RE_Data]



                GROUP BY
                Den,
                Čas
                --kWh
                --B.Den,
                --A.Čas,
                --B.Čas,
                --B.kWh



                ORDER BY
                Den ASC, Čas ASC OFFSET 0 ROWS




go
 --CREATE VIEW [dbo].[DGR_RE_Diference] AS


SELECT
    A.Den,
    Aas,
        A.kWh as Dgr_kWh,
        B.suma as RE_kWh,
    (A.kWh - B.suma) AS Rozdíl

FROM



    DGR_Data A
         LEFT JOIN [dbo].[RE_Data_sloučení] B ON B.Den = A.Den AND  B.Čas = Aas





ORDER BY
   A.Den  ASC , Aas  OFFSET 0 ROWS




go
 
Nahoru Odpovědět
13.1.2022 17:52
Avatar
c.bohumil
Člen
Avatar
c.bohumil:13.1.2022 18:07

Odkaz se zálohou MSSQL.
Přijde mi to pro Tebe nejjednodušší :-)

DGR

 
Nahoru Odpovědět
13.1.2022 18:07
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14.1.2022 8:07

Mozna by sis mel ujasnit... Mas data ze 4 tabulek. Co s tim?

den 2022-01-01, cas = 0.04, kw1 = 417, kw2=0
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=2 --- tyto hodnoty na tom obrazku nevidim
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=63 --- tyto hodnoty na tom obrazku nevidim
den 2022-01-01, cas = 0.04, kw1 = 417, kw2=0
  • ma se to vsechno zgrupovat podle datumu-casu, secit A, secist B a udelat rozdil A-B
  • nebo to poscitat jen v ramci odpovidajici tabulky? pak tam potrebujes pridat id tabulky, k radku

No, a ty prijdes s nejakou treti varianout, secist jen zaporna cisla a pridat tam sloupec s Ano / -. :) Cili, pro kazdy zaporny radek se ma objevit ano, ale stale to maji byt 4 radky? to by pak byla nejspis kombinace "LEFT JOIN (SELECT ...) tmp".

Navic, v tuto chvili neni uplne jiste, se kterymi hodnotami se dela rozdil :)

A             B
t1 1        t1 7
t1 2        t1 4
t1 6        t1 2

out
A0 - B0
A1 - B0
A2 - B0

Takhle funguje LEFT JOIN. Bys musel pouzit JOIN a pak bys tam mel 16 radku :)

 
Nahoru Odpovědět
14.1.2022 8:07
Avatar
c.bohumil
Člen
Avatar
Odpovídá na Peter Mlich
c.bohumil:15.1.2022 15:49

Ono se není čemu divit, když s tím nepracuju a není to má hlavní náplň :-)
Ty to vidíš a víš hned, já musím pátrat...

 
Nahoru Odpovědět
15.1.2022 15:49
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:15.1.2022 17:24

Nebo hadal z dostupnych informaci :)

 
Nahoru Odpovědět
15.1.2022 17:24
Avatar
c.bohumil
Člen
Avatar
c.bohumil:15.1.2022 17:27

I tak by se to dalo říct :-)
Teď se peru se sloučením těch čtyřech tabulek :-D

 
Nahoru Odpovědět
15.1.2022 17:27
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 16 zpráv z 16.