Křížové dotazy se na MS SQL dají řešit několika způsoby, záleží na tom jestli mají být dynamické nebo statické (mění/nemění se počet sloupců). Druhá věc je že data musí být agregovaná (sum, count, avg,..) a záhlaví sloupců i řádků musí být seskupená. (o to se stará až PIVOT) To znamená že třeba pepa se vám tam nezobrazí dvakrát. Poté máte opět asi dva způsoby jak pokračovat. CASE a PIVOT. Doporučuji PIVOT podle toho co vím je novější, ale havně rychlejší na napsaní. Použití vypadá si nějak takto:
select * from (select Jmeno, Hodnota, StavKeDni from vaseTabulka) as A
pivot
(
sum(Hodnota)
for StavKeDni in(['31.1.2013'], ['28.2.2013'],..)
)as B'
Toto je statický příklad. Pro dynamický provedení je nutné dosadit do závorky "in()" všechny hodnoty v kódu. To lze řešit tak, že celý dotaz dáte jako string (varchar) a vytáhnete si do proměné hodnoty ve sloupcích a pak je dosadíte do té závorky. A celé to spustíte přes EXEC(dotaz). Tohle by mělo být to co potřebujete http://sqlyoga.com/2012/12/sql-server-cr... Automaticky v záhlaví řádků budou ti lidé. alias as A je a as B je povinný - nevím proč ale bez nich to nefunguje to celé pak lze uložit jako pohled create view <nazev> as(celý dotaz) v případě dynamického si nejsem jistý jestli to lze uložit jako dotaz ale rozhodně lze udělat procedůru a tu pak volat
|