---- 0a) QUOTENAME, STUFF ---- 0b) Tabulka #T1 ---- 1a) Zoznam vsetkych hodnot Kvartalu: ---- 1b) Zoznam vsetkych hodnot Kvartalu v [] : ---- 1c) Vsetky hodnoty s odstranenim prvej ciarky , ---- 2c) DYNAMICKY - dodajme Vcelku s uplnym odstranenim NULL (+nazvy stlpcov): ---- 0a) QUOTENAME, STUFF print QUOTENAME(123); print QUOTENAME('abc') print STUFF('Bratislava', 2, 5, '_') -- nahrad USE tempdb; GO ---- 0) Tabulka #T1 --if OBJECT_ID('#T1', 'U') IS NOT NULL DROP TABLE #T1 --CREATE TABLE #T1(Oddel Char, Rok SMALLINT, Kvartal TINYINT, Obrat DECIMAL(2,1)) --GO -- INSERT INTO #T1 (Oddel, Rok, Kvartal, Obrat) -- SELECT 'A', 2006, 1, 0.6 UNION ALL -- SELECT 'B', 2006, 1, 0.7 UNION ALL -- SELECT 'A', 2006, 3, 0.9 UNION ALL -- SELECT 'B', 2006, 3, 0.7 UNION ALL -- SELECT 'A', 2006, 4, 0.8 UNION ALL -- SELECT 'B', 2006, 4, 0.8 UNION ALL -- SELECT 'A', 2007, 1, 0.7 UNION ALL -- SELECT 'A', 2007, 2, 0.9 UNION ALL -- SELECT 'A', 2007, 2, 0.9 UNION ALL -- SELECT 'A', 2007, 3, 0.8 UNION ALL -- SELECT 'A', 2007, 3, 0.6 UNION ALL -- SELECT 'A', 2007, 4, 0.9 UNION ALL -- SELECT 'B', 2007, 4, 0.7; --GO ---- 1a) Vsetky hodnoty Kvartalu: ---- --SELECT DISTINCT(Kvartal) x -- FROM( SELECT * FROM #T1) -- AS pom --ORDER BY x --FOR XML PATH('') ---- 1b) Zoznam vsetkych hodnot Kvartalu v [] : ---- ---- !!!??? pozor - neda sa citat - treba odstranit prvu ciarku , -- SELECT ',' + QUOTENAME(x) -- FROM ( -- SELECT DISTINCT(Kvartal) x -- FROM( SELECT * FROM #T1) -- AS pom -- ) pom -- ORDER BY x -- FOR XML PATH('') ---- 1c) Vsetky hodnoty s odstranenim prvej ciarky , ---- DECLARE a SET su nutne (aj bez print @zoznam): ---- DECLARE @zoznam VARCHAR(100) SET @zoznam = STUFF( ( SELECT ',' + QUOTENAME(x) FROM ( SELECT DISTINCT(Kvartal) x FROM( SELECT * FROM #T1) AS pom ) pom ORDER BY x FOR XML PATH('') ),1, 1, N''); -- maze spredu ciarku - nahradi s prazdnym znakom print @zoznam ---- 2c) DYNAMICKY - dodajme Vcelku s uplnym odstranenim NULL (+nazvy stlpcov): ---- - !!! spustit spolu s predchadzajucim 1c) ---- - neda sa kombinovat SQL + string => musi byt vsetko v string: DECLARE @sql AS NVARCHAR(MAX) SET @sql = N' SELECT Rok, COALESCE([1],0) [1], COALESCE([2],0) [2], COALESCE([3],0)[3], COALESCE([4],0)[4], COALESCE([1],0)+ COALESCE([2],0) + COALESCE([3],0) + COALESCE([4],0) Vcelku FROM (SELECT Rok, Kvartal, Obrat FROM #T1) pom PIVOT ( SUM(Obrat) FOR Kvartal IN (' + @zoznam + ') ) piv ORDER BY Rok' print @sql EXEC sp_executesql @sql;