Stránka 1 z 1
Pomoc s SQL dotazem
Napsal: čtv 24. bře 2005, 10:28
od Dony
Mam tabulku, ktera vypada nejak takhle...
Jmeno Server Pocet
---------------------------
jm1 s1 1
jm2 s1 3
jm1 s2 2
jm1 s3 1
jm2 s2 2
jm1 s3 3
.
.
.
a potreboval bych z toho dostat neco takoveho...
jmeno s1 s2 s3
--------------------------
jm1 1 2 4
jm2 3 2
.
.
.
da se to nejak primo SQL dotazem? (tohle uz je za hranici mych znalosti SQL...

)
Napsal: čtv 24. bře 2005, 10:49
od miho
Napis pro jaky SQL server.
Napsal: čtv 24. bře 2005, 11:15
od Dony
MS SQL 2000
Napsal: čtv 24. bře 2005, 12:34
od miho
Ano, tam v MS SQL to udelas.
Navod: vytvoris temporary table. Vyselektujes distinct server. Procyklujes to pomoci kurzoru. Uvnitr kurzoru udelas neco takoveho
declare @SQL as varchar(100)
set @SQL ='alter table docasna add ' + @server + ' int'
execute(@SQL )
(musi to byt takto zbesile protoze dotaz
alter table docasna add @server int
MSSQL nesezere)
no a uz mas pripravenou tabulku. Pak uz jen procyklovat pres cely select * from tabulka, naplnit hodnoty v temp. table (opet se pouzije trik s poskladanim SQL v retezci) a tu na konci vyselektovat.
Trochu psycharna ale zvladnout se to da.
Napsal: čtv 24. bře 2005, 13:06
od Dony
oops, to je na me nejak moc slozity...
miho píše:vytvoris temporary table.
...to bych nejak zvladnul
Kód: Vybrat vše
create table [dbo].[docasna]([UserName] [varchar] (32) NOT NULL)
miho píše:Vyselektujes distinct server.
select distinct... taky
ale cyklovani pomoci kurzoru mi tedy nic nerika
miho píše: Procyklujes to pomoci kurzoru. Uvnitr kurzoru udelas neco takoveho
declare @SQL as varchar(100)
set @SQL ='alter table docasna add ' + @server + ' int'
execute(@SQL )
Napsal: čtv 24. bře 2005, 13:39
od miho
temporary table ma na zacatku nazvu #
Kuzror: query analyzer ma dost dobrou napovedu (Transact-SQL) tam najdes vse potrebne. Nakopnuti:
Kód: Vybrat vše
DECLARE @server as varchar(1000)
declare @SQL as varchar(1000)
DECLARE kurzor CURSOR FOR SELECT distinct Server FROM tabulka
OPEN kurzor
FETCH NEXT FROM kurzor INTO @Server
WHILE (@@FETCH_STATUS = 0)
BEGIN
set @SQL ='alter table #docasna add ' + @server + ' int'
execute(@SQL )
FETCH NEXT FROM kurzor INTO @Server
END
CLOSE kurzor
DEALLOCATE kurzor
tak to mas udelany komplet ten prvni cyklus.
Napsal: čtv 24. bře 2005, 13:48
od miho
Ted jeste ten druhy:
Kód: Vybrat vše
DECLARE @jmeno as varchar(1000)
declare @pocet as int
DECLARE kurzor CURSOR FOR SELECT jmeno,server,pocet FROM tabulka
OPEN kurzor
FETCH NEXT FROM kurzor INTO @jmeno,@server,@pocet
WHILE (@@FETCH_STATUS = 0)
BEGIN
if not exists(select 1 from #docasna where UserName=@jmeno)
begin
insert into #docasna(UserName) values(@jmeno)
end
set SQL='UPDATE #docasna SET ' + @server +'='+cast(@pocet as varchar(10))+' WHERE UserName='''+@jmeno+''''
execute(SQL)
FETCH NEXT FROM kurzor INTO @jmeno,@server,@pocet
END
CLOSE kurzor
DEALLOCATE kurzor
pisu to z fleku bez zkouseni takze tam budou urcite syntakticke chyby...
Napsal: čtv 24. bře 2005, 14:50
od Dony
Super, diky moc, mas u me pivo

, chyby tam byly jen dve, ted jeste jestli se mi povede do toho nacpat scitani
//Povedlo se, finished...