NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Kopírování dat z tabulky do tabulky plus duplikace řádku (MSSQL)

V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
David Tilšer:8.2.2018 19:28

Ahoj,

potřeboval bych radu.

Mám tabulky A, B. Potřeboval bych udělat query, která mi bude v tabulce A porovnávat hodnoty ve sloupci Sloupec. Když tam narazí na požadovanou hodnotu, tak celý řádek duplikuje v tabulce A, poté v duplikovaném řádku upraví Sloupec na jinou hodnotu. Poté ID duplikovaného řádku překopíruje do nového řádku v tabulce B.
A ještě tam musí být kontrola, že pokud ID, který kopírujeme z tabulky A už v tabulce B je na nějakém řádku, tak ten řádek musíme v tabulce B odstranit a nahradit tím novým.

Kód jak jsem se to snažil udělat mám ve škole a teď se k němu nedostanu, každopádně jsem nebyl schopen to udělat funkční. Díky za každou radu.

Odpovědět
8.2.2018 19:28
Odpočinek je pro slabochy.
Avatar
Odpovídá na David Tilšer
Michal Štěpánek:9.2.2018 19:31

Dotaz mi přijde takový zmatený. Vzhledem k tomu, že ID záznamu by mělo být unikátní, neměla by nastat situace, kdy by už existovalo v druhé tabulce (pokud se plní pouze kopírováním dat z té první)...
Chtělo by to trošku rozvést, ukázat nějakou strukturu těch tabulek...

Nahoru Odpovědět
9.2.2018 19:31
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jakub Švasta
Lektor
Avatar
Jakub Švasta:9.2.2018 20:30

Třeba takto:

DECLARE @CilovaHodnota VARCHAR(255), @MenenaHodnota VARCHAR(255), @PuvodniMaxId INT, @NoveMaxId INT

SELECT @CilovaHodnota = 'S cim se ma porovnavat', @MenenaHodnota = 'Na jakou jinou hodnotu se ma nastavit'
SELECT @PuvodniMaxId = MAX(Id) FROM A

INSERT INTO A
        (
        Sloupec
        ,DalsiSloupec1
        ,DalsiSloupec2
        )
SELECT  Sloupec
        ,DalsiSloupec1
        ,DalsiSloupec2
FROM A
WHERE Sloupec = @CilovaHodnota

SELECT @NoveMaxId = MAX(Id) FROM A

UPDATE A
SET Sloupec = @MenenaHodnota
WHERE Id BETWEEN @PuvodniMaxId + 1 AND @NoveMaxId

DELETE FROM B WHERE DuplikovaneIdTabulkyA BETWEEN @PuvodniMaxId + 1 AND @NoveMaxId

INSERT INTO B
        (
        DuplikovaneIdTabulkyA
        )
SELECT  Id
FROM A
WHERE Id BETWEEN @PuvodniMaxId + 1 AND @NoveMaxId
 
Nahoru Odpovědět
9.2.2018 20:30
Avatar
David Tilšer:9.2.2018 20:57

Omlouvám se, když to teď po sobě čtu, tak vidím, jak je to strašně zmateně napsané.
Každopádně správné řešení pro svůj případ už mám. Každopádně děkuji za odpovědi.

Nahoru Odpovědět
9.2.2018 20:57
Odpočinek je pro slabochy.
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 4 zpráv z 4.