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 :worship: , chyby tam byly jen dve, ted jeste jestli se mi povede do toho nacpat scitani :)

//Povedlo se, finished...