jak provést podmíněné uspořádání pro dva nebo více sloupců
<p>v ms sql server 2005 píšu jeden dotaz s podmíněným tříděním a mým problémem je, že nevím, jak mohu třídit podmíněně pomocí dvou sloupců?</p><p>pokud jsem napsal kód, jako je tento, funguje to normálně</p><pre><code>select * from table order by case @pkr when 'kol' then kol when 'nci' then nci end </code></pre><p>nevím, jak provést podmíněné objednání pro dva nebo více sloupců</p><pre><code>select * from table order by case @pkr when 'kol-nci' then kol,nci when 'kol-mpci' then kol,mpci end </code></pre><p>existuje nápad vytvořit dynamickou tsql a použít <code>sp\_executesql</code> ale stále hledám lepší nápad?</p>
<p>přiznávám, že jsem to nikdy předtím neudělal, takže došlo k trochu poškrábání hlavy. jednoduchá ukázková tabulka, která demonstruje:</p><pre><code>if exists (select * from sys.objects where object\_id = object\_id(n'[dbo].[mytable]') and type in (n'u')) drop table [dbo].[mytable] go create table dbo.mytable ( col1 int , col2 char(1) ) go insert dbo.mytable (col1, col2) values (1, 'a') insert dbo.mytable (col1, col2) values (1, 'b') insert dbo.mytable (col1, col2) values (1, 'c') insert dbo.mytable (col1, col2) values (2, 'a') insert dbo.mytable (col1, col2) values (2, 'b') insert dbo.mytable (col1, col2) values (2, 'c') insert dbo.mytable (col1, col2) values (3, 'a') insert dbo.mytable (col1, col2) values (3, 'b') insert dbo.mytable (col1, col2) values (3, 'c') </code></pre><p>pomocí parametru @sortstyle k rozlišení objednávek řazení se @sortstyle = 1 třídí podle <code>col1 asc, col2 desc</code> a @ sortstyle = 2 seřadit podle <code>col2 desc, col1 asc</code>.</p><pre><code>declare @sortstyle int set @sortstyle = 1 select col1 , col2 from dbo.mytable order by case when @sortstyle = 1 then col1 end asc, case when @sortstyle = 1 then col2 end desc, case when @sortstyle = 2 then col2 end desc, case when @sortstyle = 2 then col1 end asc set @sortstyle = 2 select col1 , col2 from dbo.mytable order by case when @sortstyle = 1 then col1 end asc, case when @sortstyle = 1 then col2 end desc, case when @sortstyle = 2 then col2 end desc, case when @sortstyle = 2 then col1 end asc </code></pre><p> <a href="https://dba.stackexchange.com/questions/4104/how-do-you-order-by-a-parameter/4111#4111">jak se objednáváte parametrem</a> pokrývá jednodušší případ třídění podle 1 sloupce.</p>
Často toto je provedeno pomocí [„Data Driven odběry“](https://msdn.microsoft.com/en-us/library/ms169673.aspx) , ale tato funkce je k dispozici pouze v některých SQL vydáních: Enterprise a Business Intelligence, ale ne v normě.


Takže existuje celá řada kreativních řešení. Ale nemám rád žádné z nich, a všechny vyžadují spravedlivý trochu práce mimo SSRS.


Mezi řešení, které jsem viděl, patří: Vytvoření odběr a potom zakázání nebo povolení SQL úlohu, kterou odešle předplatné (identifikovatelné podle GUID).


Vytvořte si .NET obálky exe zvládnout odeslání e-mailu. Je možné spustit dotaz nejprve zjistit, kolik se vrací řádky, a pak v případě potřeby generovat zprávu a zahrnout do e-mailu. Udělej si dvě tabulky. V jedné budeš mít kompletní info a ve druhé jen požadovaný výstup. Pokud budeš mít vše ve stejném formátu a seřazené, je to už snadné. [`IGNORE_SPACE`](http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_ignore_space)Režim umožňuje mezery mezi názvy funkcí a následující závorkách. Pokud je to povoleno, všechny názvy funkcí se stal vyhrazená slova, protože to stane se nemožné pro MySQL, zda voláte funkce nebo deklarovat (s použitím) identifikátor.


Proto, pokud je to povoleno, vaše `CREATE TABLE`selže a následující:



```
SELECT MD5 (some_column) FROM some_table

```

bude pracovat. Pokud `IGNORE_SPACE`je vypnuta, opak stane ( `CREATE TABLE`bude fungovat a především `SELECT`nebude, protože tam je mezera mezi názvu funkce a závorce). Pokud se ti nechce do maker, tak prohoď řádky a sloupce a použij standardní řazení.[http://www.chip.cz/clanky/tipy-triky/aplikac...](http://www.chip.cz/clanky/tipy-triky/aplikace/2011/07/prevraceni-tabulky-2013-zamena-radku-a-sloupcu) SMO se systémem T-SQL pod přikrývkou. Dalo by se prototyp SMO a pak sledovat v Profiler získat T-SQL.


Je to pravděpodobně k narušení EULA, ale mohli jste redistrib SMO sestav bok po boku s aplikací, bez nutnosti instalace v tomto případě. Nemyslím si, že jejich instalační program zasáhne registru. Docela snadno rozbít otevřený na SQLServerManagementObjects.msi a zjistit. Hmm, zni to dost zmatene. Nechapu, proc by tabulka z Wordu nesla zkopcit?! A ta druha tabulka v Excelu je zase co? Tak je v Excelu nebo ve Wordu? Neni to kontingencni tabulka? Zkuste pomalu a srozumitelne popsat o co presne jde a uvedomte si, ze jste jedina kdo vi vsechny informace a musite je predat. Takže jste se ptali, jak zvládnout práci na násobku „úkolů“ najednou, ne? S výjimkou větvení.


Můžete mít více checkouts ze zdroje na lokálním počítači, suffixing název adresáře s názvem lístku, na kterém pracujete. Jen se ujistěte, aby se změny ve správném adresáři, v závislosti na úkolu ...


Směšování více úkolů v jedné pracovní kopii / commit může být velmi matoucí, zvláště pokud někdo potřebuje, aby svou práci zkontrolovat později. Zdravim,tak napr. takhle:sloupec A jsou datumy, sloupec B jmeno, sloupec C obshuje 0 nebo 1. Pokud 1, bude datum v A zelene podbarveny.Oznacit vsechny datumy (radky), zvolit podminene formatovani, nove pravidlo. Zvolit pouzit vzorec a do radky napsat =$C1=1, format vybrat napr. zelene podbarveni a potvrdit OK.Zabarveni celeho radku se provede zvoleni pomineneho formatovani a polozky upravit pravidla. Ve tretim sloupecku je aplikovat na... , kde je oblast ve sloupci A (datumy). Lze to zde zmenit a rozsirit na celou oblast tabulky a bude zvyrazneny cely radek.Podobne muzeme nastavit zabarveni cervene pro hodnotu 0.S pozdravem,syd Případ 1 - podle přístupnosti bych střihl až za kolenem .Navařit buďto opět přímo hotové šroubení, nebo DG a tzv.půlšroubení - délkově by to mělo vyjít střihnout až těsně před nátrubkem (dá se sehnat půlšroubení s delším dříkem)

Případ 2 - buďto navařit víčko nebo zatavit konec trubky =Row() pro radek=Column() pro sloupecjako argument to bere i referenci. Bez reference to udava cislo/pismeno radku/sloupce aktualni bunky.