Avatar
Petr Polcer
Člen
Avatar
Petr Polcer:

Zdravím, potřeboval bych radu.
Mám tabulku o více hodnotách kde jsou sloupce takto

  1. telefon, mobil, email, fax, ICQ ...
  2. +420xxxyyyzzz, +420xxxyyyzzz, name@company.com, ..

a potřeboval bych vypsat záznamy, které mají přiřazený jen telefon, mobil, email nebo NULL. Jenže položku email nevypisuju, protože to vše vkládám do jiné tabulky do sloupce "Telefon" takže společnosti, které mají přiřazen jen email (tedy nemají telefon, mobil a ani NULL) nechci z reportu vyhodit.
Nevíte někdo jak např. v SELECTu přiřadit za email třeba jen textový řetězec NULL? Nebo jsou i jiné způsoby?

Předem díky

 
Odpovědět 19.11.2015 9:54
Avatar
Odpovídá na Petr Polcer
Michal Štěpánek:

Je to takové trošku zmatené. Co má znamenat "email nebo NULL"? Předpokládám, že je to "text", takže buď tam je vyplněn email, nebo nic. Z toho jak jsi to napsal to skoro vypadá, že chceš vypsat úplně vše. Trošku to upřesni. Chceš zobrazit emaily nebo nechceš?
Co vlastně chceš zobrazit a co s tím pak chceš dělat?

Nahoru Odpovědět 19.11.2015 10:19
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Polcer
Člen
Avatar
Odpovídá na Michal Štěpánek
Petr Polcer:

V cílové tabulce bude sloupec, který má název "TelefonORG" a budou tam data buď Telefon, Mobil nebo NULL.
Takto by to bylo jednoduché, jenže já tam k tomu musím přidat i firmy, které mají v kontaktech vyplněný email, ale ten email potom nechci zobrazit.

Princip je asi takový, vytvářím nějaký report a v tom reportu je sloupec telefon organizace "TelefonORG" (kde bude jejich Telefon, Mobil a pokud nemají přiřazené ani jedno bude tam NULL, jenže firmy, které mají přiřazený i email tam budou zahrnuty taky, ale email nebude vypsán protože je nežádoucí do sloupce "TelefonORG" vypisovat email.

Ten sloupec TelefonORG obsahuje FK kt.ID_TypKontakt kde 'kt' je tabulka Kontakt a podle ID_TypKontakt (FK z tabulky TypKontakt) se určuje jaký typ kontaktu to je. (1 Telefon, 2 email, 3 mobil, atd.)

 
Nahoru Odpovědět 19.11.2015 10:39
Avatar
Odpovídá na Petr Polcer
Michal Štěpánek:

Máš na mysli něco takového?

SELECT * FROM Tabulka WHERE ((telefon <> "") OR (mobil <> "") OR (email <> ""))
Nahoru Odpovědět 19.11.2015 13:20
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Polcer
Člen
Avatar
Odpovídá na Michal Štěpánek
Petr Polcer:

V podstatě ano, akorát potom se mi ve sloupci TelefonORG objeví i email. Není nějaká funkce která by ten email v tom selectu třeba přepsala (třeba na NULL)? Zkoušel jsem REPLACE ale stejně mi nešlo jak v SQL říct, že z toho jednoho sloupce chci nahradit jen email a né ty telefonní čísla.

SELECT kt.ID, kt.TelefonORG
FROM Kontakt kt
WHERE (id_TypKontakt BETWEEN 1 AND 3) OR id_TypKontakt IS NULL

ID 1 a 3 jsou Telefon a mobil. ID 2 je email. Chci vypsat i záznamy co mají jen ten email ale samotný email už nechci zobrazit. Tím myslím, že kt.ID by se zobrazilo, ale v tom záznamu za kt.TelefonORG by bylo např. NULL.

 
Nahoru Odpovědět 19.11.2015 14:29
Avatar
Odpovídá na Petr Polcer
Michal Štěpánek:

V čem to vlastně děláš? Přece si z dotazu můžeš vybrat, co chceš zobrazit a co ne...

Nahoru Odpovědět 19.11.2015 15:44
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Polcer
Člen
Avatar
Petr Polcer:

MS SQL, to ano, mohl bych si vybrat co chci zobrazit kdybych měl zdrojová data uspořádané ve sloupcích jakože zvlášť Telefon, Mobil, Email atd. jenže takhle to nemám. Mám k dispozici právě jen dva sloupce, 1. ID_TypKontakt, 2. Text. V 1. sloupci jsou IDčka 1, 2, 3 atd. kde 1 značí, že záznam je telefon, 2 že je email a 3 je mobil. Tedy všechny kontaktní data jsou naházeny jen v 2. sloupci pod sebou.

 
Nahoru Odpovědět 19.11.2015 17:17
Avatar
Odpovídá na Petr Polcer
Michal Štěpánek:

Jsem z toho zmatenej. Napiš mi strukturu všech tabulek, co se tam používají, ať se v tom trochu vyznám...

Nahoru Odpovědět 19.11.2015 18:14
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Polcer
Člen
Avatar
Petr Polcer:

Však jsem se to snažil napsat už předtím. Tak dobře, pošlu ti přímo příklad těch tabulek. A řekňěme, že některá organizace nemá uvedený kontakt (NULL), to nevadí a vypíšeme u tel. čísla NULL. Ale některá organizace má uloženo jen ID_Kontakt=5 (Mají jen email, ale v nemají NULL!). V tom případě ji při výpisu chci vypsat, ale ten email nechci zobrazit.

Kontakt
ID      ID_TypKontakt           Text                            ID_Organizace
1               5               http://webiste.com              Organizace 1
2               1               +421111222333                   Organizace 1
3               1               +421000111222                   Organizace 1
4               1               +421000111222                   Organizace 3
5               2               stranka@domena.cz               Organizace 4
7               7               6666666                         Organizace 3
8               3               +420123456789                   Organizace 2
9               2               ja@kontakt.sk                   Organizace 2

TypKontakt
ID      Text
1       Mobil
2       E-mail
3       Telefon
4       Fax
5       URL web
.
.

TelefonORG (Výsledný sloupec, který obsahuje jen Telefon, Mobil a když org. nemá přiřazeno tak NULL)
Měl by vypadat takto:
+420123456789
+420987654321
+421456789123
NULL
+420123456999
NULL
NULL
NULL

Jenže u mě vypadá takto:
+420123456789
+420987654321
+421456789123
email@nepatrisem.cz
+420123456999
NULL
dalsi@cobytunemelbyt.sk
NULL

Mohl bych z WHERE odstranit emaily, v tom případě by se mi nezobrazili, ale jak jsem psal dříve, některé organizace které mají v kontaktu uveden jen email by to vyhodilo.

 
Nahoru Odpovědět 20.11.2015 8:43
Avatar
Honza
Člen
Avatar
Honza:

Pořád to je takový zmatený, jediný co jsem pochopil je, že ta tabulka je blbě navržená a máš bordel v datech (neříkám že to je tvoje chyba, možná jsi jen přišel k hotovému a musíš s tím pracovat).

Každopádně pokud nechceš aby se ti zobrazoval email, jde vyjít z toho že validní!!! email obsahuje zavináč a validní telefon ne. Takže můžeš použít něco jako:

SELECT * FROM Tabulka WHERE Text NOT LIKE '%@%' -- + nějaký další podmínky podle potřeby
Nahoru Odpovědět 20.11.2015 9:34
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Odpovídá na Petr Polcer
Michal Štěpánek:

A ještě napiš v čem to děláš? C#, ASP.NET, nebo v čem to zobrazuješ?

Nahoru Odpovědět 20.11.2015 9:47
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Petr Polcer
Člen
Avatar
Odpovídá na Honza
Petr Polcer:

Ano, přišel jsem k hotovému. To co jsi psal, použít nemůžu, protože mi to nějaké organizace úplně vyháže. Potřebuju, aby tam ten celý řádek zůstal, jen aby se v tom jednom sloupci buď ten email nevypsal nebo se třeba přepsal na NULL.

 
Nahoru Odpovědět 20.11.2015 9:48
Avatar
Petr Polcer
Člen
Avatar
Odpovídá na Michal Štěpánek
Petr Polcer:

MS SQL / Microsoft SQL Server Management Studio 2014

 
Nahoru Odpovědět 20.11.2015 9:52
Avatar
Honza
Člen
Avatar
Honza:

Jo takhle. Pokud to máš na MS SQL tak můžeš použít tohle:

SELECT CASE WHEN Text LIKE '%@%' THEN NULL ELSE Text END
FROM Tabulka

Tohle by ti mělo fungovat i když to není moc pěkný a netuším co to udělá s výkonem na větším množství dat.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět 20.11.2015 9:55
Snadnou cestou se daleko nedostanete, je tam velká tlačenice...
Avatar
Petr Polcer
Člen
Avatar
Petr Polcer:

bezva, díky

 
Nahoru Odpovědět 20.11.2015 10:06
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 15 zpráv z 15.