výběr umístění dvou sloupců v sadě
<p>může to být hloupá otázka a mám podezření, že to nemohu udělat, ale existuje v sql konstrukt, který by mi umožnil dělat něco jako následující:</p><pre><code>select whatever where col1,col2 in ((val1, val2), (val1, val2), ...) </code></pre><p>chci vybrat data, kde jsou dva sloupce v sadě párů.</p><p>chtěl bych se vyhnout použití subdodávky, pokud je to možné.</p>
<blockquote> <p>existuje v sql konstrukt, který by mi umožnil dělat něco jako následující:</p> </blockquote><p>ano, existuje téměř přesně tak, jak jste to napsali. stačí do závorek vložit <code>col1, col2</code>:</p><pre><code>-- works in postgresql, oracle, mysql, db2, hsqldb select whatever from t  you missed the from where (col1, col2)  parentheses here in ((val1a, val2a), (val1b, val2b), ...) ; </code></pre><p>pokud to zkusíte v dbms, možná zjistíte, že to nefunguje. protože ne všechny dbms implementovaly všechny funkce (vyvíjejícího se) standardu sql. funguje to v nejnovějších verzích oracle, mysql, postgres, db2 a hsqldb (nebylo to v mysql dobře optimalizováno a nepoužívaly indexy, proto by se tam nemělo vyhýbat, pokud to neřeší v 5.7).</p><p>viz mysql dokumentace o <a href="https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#function\_in"><code>in</code> operator</a> a postgres dokumentace o <a href="https://www.postgresql.org/docs/current/static/sql-expressions.html#sql-syntax-row-constructors">row konstruktory</a> . dvě * (nebo více) hodnot v závorkách se nazývají konstruktory řádků <strong> </strong>.</p><p>další způsoby, které vyjadřují stejnou myšlenku:</p><pre><code>-- works in postgresql, db2 select whatever from t where (col1, col2) in ( values (val1a, val2a), (val1b, val2b), ...) ; select t.whatever from t join ( values (val1a, val2a), (val1b, val2b), ...) as x (col1, col2) on (x.col1, x.col2) = (t.col1, t.col2) ; </code></pre><p>oba pracují v postgresu a db2 (afaik). poslední může být také upraven tak, aby fungoval na serveru sql server:</p><pre><code>-- works in postgresql, db2, sql server select t.whatever from t join ( values (val1a, val2a), (val1b, val2b), ...) as x (col1, col2) on x.col1 = t.col1 and x.col2 = t.col2 ; </code></pre><p>může být také upraven tak, aby fungoval všude, nejprve uložením hodnot do (dočasné nebo trvalé) tabulky:</p><pre><code>-- works everywhere create table values\_x ( col1 ..., col2 ...) ; -- use appropriate for the dbms syntax here insert into values\_x (col1, col2) values (val1a, val2a), (val1b, val2b), ... ; select t.whatever from t join values\_x x on x.col1 = t.col1 and x.col2 = t.col2 ; drop table values\_x ; </code></pre><p>a vždy existuje dlouhá cesta nebo převod <code>in</code> na dlouhý výraz s <code>or</code>, který by měl fungovat všude:</p><pre><code>-- works in all sql dbms select whatever from t where col1 = val1a and col2 = val2a or col1 = val1b and col2 = val2b  ; </code></pre><p>*: ve skutečnosti to může být jen jedna hodnota, s <code>row(v)</code>, viz postgres docs.</p>
Nebyla by lepší kontingenční tabulka filtrovaná pomocí průřezů? V průřezech si naklikáš kombinaci a kontingenční tabulka pak ukáže dané hodnoty. takze rozumel-li jsem dobre zadani, pak lze postupovat nasledovne:v A1 je hodnota (cena), v C1 bude umisteno zaskrtavaci pole (muze byt i jinde), spojeno bude s bunkou E1 (True/False)soucet vybranych hodnot lze ziskat alternativne:- v F1: =A1*E1, pro ostatni bunky a policka totez (...,A4, E4, F4), v F5 vlozeno =SUMA().- v bunce urcene pro soucet (napr. G1): =SOUČIN.SKALÁRNÍ((A1:A4)*(E1:E4))Pozn.: Logicke hodnoty True/False Excel interpretuje jako 1/0 Asi nechápu?Na listu 1 např. v buňce C2 napíšu číslo nebo text a chci aby totéž bylo na listu 2 v buňce F2? To je to co chceš dosáhnout?Pak prostě do buňky F2 na listu 2 napíšu =List1!C2. Samozřejmě to jde i tak, že tam napíšu jen = a myši vyberu tu buňku na listu 1. To je naprostý základ v Excelu. [`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 v řádcích bude :  
1. A  
2. B  
3. C  
4. D  
Tak tady bude třeba :  
=SUMA(KDYŽ(NEBO(C3="A";C3="B");5;2);KDYŽ(NEBO(C4="A";C4="B");5;2);KDYŽ(NEBO(C5="A";C5="B");5;2);KDYŽ(NEBO(C6="A";C6="B");5;2))  
Bože to je ale zvěrstvo. Pozor na délku vzorce v buňce ! Asi by se muselo trochu víc přemýšlet. 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. 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é. Ach jo, kam ten svět kráčí.1) vložit jinak - hodnoty2) úplně nechápu zadaní, ale předpokládám, že fce CONCATENATEpoužití google, nebo nápovědy (F1) ti řekne více Č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. 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