Autor Wątek: Warunek CASE i zmiana nazwy Kolumny  (Przeczytany 6573 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline hansikkk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +0/-1
  • Wersja programu: Subiekt GT 1.25
Warunek CASE i zmiana nazwy Kolumny
« dnia: Październik 20, 2016, 14:34:19 »
Witam,

Mam takie zapytanie:
Cytuj
SELECT
ob_TowRodzaj = CASE WHEN ob_TowRodzaj = 1 THEN '1' ELSE ob_TowRodzaj END,
FROM
[...]

Dwa pytania:
Jak ustalić nazwę kolumny? Gdy po END daję AS Towar, otrzymuję błąd,
Jak zmienić '1' na 'Pojedynczy_towar'

Pozdrawiam,

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9210
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #1 dnia: Październik 20, 2016, 14:46:02 »
1. Nazwę kolumny masz na początku, przed znakiem równości...
2. '1' na 'pojedynczy towar' zmieniasz najnormalniej wpisując nową wartość, ale musisz dokonać konwersji ob_towRodzaj na ciąg znaków.
Sławek, Zduńska Wola

Offline hansikkk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +0/-1
  • Wersja programu: Subiekt GT 1.25
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #2 dnia: Październik 20, 2016, 15:15:32 »
Dziękuję za pomoc

Ad 1)
Chcę zmienić nazwę kolumny ob_TowRodzaj  na Rodzaj, nie działają:

ob_TowRodzaj AS Rodzaj = CASE WHEN ob_TowRodzaj = 1 THEN '1' ELSE ob_TowRodzaj END,

Lub też: 

ob_TowRodzaj = CASE WHEN ob_TowRodzaj = 1 THEN '1' ELSE ob_TowRodzaj END AS Rodzaj,


Ad 2)
W jaki sposób dokonać tej konwersji? Wiem że jest funkcja CONVERT, ale nie umiem jej poprawnie użyć.

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9210
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #3 dnia: Październik 20, 2016, 15:23:06 »
A kolega to z takich co chcą gotowego rozwiązania, a jak nie dostają to dają minusy pisząc "Gada a nie pomaga"?

To ja już nie będę gadał...
Sławek, Zduńska Wola

Offline hansikkk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +0/-1
  • Wersja programu: Subiekt GT 1.25
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #4 dnia: Październik 20, 2016, 15:27:00 »
Oczywiście, bo męczę się z tym od 2h i nie mam ochoty słuchać tekstów typu że idę na łatwiznę. Po co według Ciebie jest forum? Po to by się powymądrzać, czy pomóc?

Offline hansikkk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +0/-1
  • Wersja programu: Subiekt GT 1.25
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #5 dnia: Październik 24, 2016, 14:32:11 »
Witam,

Poprawnie działający kod:

DECLARE   @dataDo DATETIME
SET   @DataDo = '20161231'
SELECT
Year(dok_DataWyst) AS [Year],
Month(dok_DataWyst) AS [Month],
 
CASE WHEN ob_TowRodzaj = 1 THEN 'Towar' WHEN ob_TowRodzaj = 2 THEN 'Usługa jednorazowa'  WHEN ob_TowRodzaj = 8 THEN 'Komplet' ELSE convert(char(20), ob_TowRodzaj) END AS 'Rodzaj towaru',
 

 tw_Id AS 'Id towaru',
CASE WHEN tw_Nazwa = '' THEN '(Brak nazwy towaru)' ELSE
CASE WHEN tw_Nazwa IS NULL THEN '(Usługa jednorazowa)' ELSE tw_Nazwa END END AS Nazwa,
tw_Symbol AS Symbol,
 
SUM(ob_IloscMag * ob_Znak) as Ilość
 
  FROM vwZstSprzWgKhnt LEFT JOIN tw__Towar ON ob_TowId = tw_Id LEFT JOIN sl_GrupaTw
  ON tw_IdGrupa = grt_Id WHERE dok_Status<>2
   AND (( (dok_DataWyst>='20160101') AND (dok_DataWyst<='20161231') )
   AND (dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp)
    IN (131072,         131074, 131075, 131076, 131077, 262144, 393216, 393217, 393218, 1376256, 1376257,
1376258, 1376259, 917504, 917505, 4063232)) AND (dok_MagId IN (1))) AND  ob_TowRodzaj & 15 > 0 

GROUP BY
Year(dok_DataWyst), Month(dok_DataWyst),
  ob_TowRodzaj, tw_Nazwa, tw_Symbol, grt_Nazwa,tw_JednMiary, tw_Id

Offline Aldo

  • Ekspert
  • *****
  • Wiadomości: 10695
  • Reputacja +433/-13
  • Wersja programu: najnowsza
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #6 dnia: Październik 24, 2016, 14:59:26 »
Oczywiście, bo męczę się z tym od 2h i nie mam ochoty słuchać tekstów typu że idę na łatwiznę. Po co według Ciebie jest forum? Po to by się powymądrzać, czy pomóc?
Pomóc, ale tak aby nauczyć czyli nie dając ryby, tylko wędkę.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17063
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #7 dnia: Październik 24, 2016, 15:11:59 »
Dla początkujących dodam, że zadziała w SSMS, ale nie zadziała w zestawieniu SQL.
Daniel, Białystok.

Offline hansikkk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +0/-1
  • Wersja programu: Subiekt GT 1.25
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #8 dnia: Październik 24, 2016, 15:13:35 »
Wow, super...
Przeanalizujmy:
1. Nazwę kolumny masz na początku, przed znakiem równości...
Naprawdę? Nie wiedziałem że w SELECT wpisujemy nazwy kolumn, dziękuje, sprawa rozwiązana

2. 2. '1' na 'pojedynczy towar' zmieniasz najnormalniej wpisując nową wartość, ale musisz dokonać konwersji ob_towRodzaj na ciąg znaków.
Wow, ale magia, nie wiedziałem że istnieje manual do SQL-a
https://msdn.microsoft.com/pl-pl/library/ms187928(v=sql.110).aspx

Dziękuję za wspaniałe informacje o których nie miałem pojęcia. Macie oboje po +

Offline Chris

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 2850
  • Reputacja +275/-0
  • Wersja programu: GT, Nexo - aktualne
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #9 dnia: Październik 24, 2016, 16:49:02 »
Wow, super...
Przeanalizujmy:
1. Nazwę kolumny masz na początku, przed znakiem równości...
Naprawdę? Nie wiedziałem że w SELECT wpisujemy nazwy kolumn, dziękuje, sprawa rozwiązana
Mój czteroletni syn by powiedział, że jesteś pierdoła :)
Mam takie zapytanie:
Cytuj
SELECT
ob_TowRodzaj = CASE WHEN ob_TowRodzaj = 1 THEN '1' ELSE ob_TowRodzaj END,
FROM
[...]
ob_TowRodzaj (to przed znakiem = ) to nazwa kolumny, Sławek napisał, Ty nie rozumiesz, ale się nie przyznasz, tylko rzucasz "mięsem". 
Krzysztof, Radom

Offline Chris

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 2850
  • Reputacja +275/-0
  • Wersja programu: GT, Nexo - aktualne
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #10 dnia: Październik 24, 2016, 17:01:30 »
Dla początkujących dodam, że zadziała w SSMS, ale nie zadziała w zestawieniu SQL.
Daniel, to jest skopiowane bez pomyślunku zestawienie, zadeklarowane zmienne nie są nawet używane.
Krzysztof, Radom

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17063
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #11 dnia: Październik 24, 2016, 17:27:39 »
Dla początkujących dodam, że zadziała w SSMS, ale nie zadziała w zestawieniu SQL.
Daniel, to jest skopiowane bez pomyślunku zestawienie, zadeklarowane zmienne nie są nawet używane.

Co nie zmienia tego co napisałem - nie zadziała w zestawieniach SQL, gdybyś ktoś próbował.
Daniel, Białystok.

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9210
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #12 dnia: Październik 24, 2016, 17:49:06 »
A jak się ma powyższy działający kod do zadanego pytania:
Jak zmienić '1' na 'Pojedynczy_towar'

Ja nie widzę tego w tym kodzie...

Co do tego co jest przed znakiem "=" (jako odpowiedź na pierwsze pytanie) nie będę się wypowiadał, bo Krzysiek wyjaśnił.
« Ostatnia zmiana: Październik 24, 2016, 17:55:38 wysłana przez birds22 »
Sławek, Zduńska Wola

Offline hansikkk

  • Nowy użytkownik
  • *
  • Wiadomości: 33
  • Reputacja +0/-1
  • Wersja programu: Subiekt GT 1.25
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #13 dnia: Październik 25, 2016, 12:42:45 »
Wow, super...
Przeanalizujmy:
1. Nazwę kolumny masz na początku, przed znakiem równości...
Naprawdę? Nie wiedziałem że w SELECT wpisujemy nazwy kolumn, dziękuje, sprawa rozwiązana
Mój czteroletni syn by powiedział, że jesteś pierdoła :)
Mam takie zapytanie:
Cytuj
SELECT
ob_TowRodzaj = CASE WHEN ob_TowRodzaj = 1 THEN '1' ELSE ob_TowRodzaj END,
FROM
[...]
ob_TowRodzaj (to przed znakiem = ) to nazwa kolumny, Sławek napisał, Ty nie rozumiesz, ale się nie przyznasz, tylko rzucasz "mięsem".

Gratuluję umiejętności czytania ze zrozumieniem, a przede wszystkim znajomości terminu ironia.

Pytanie nie dotyczy miejsca gdzie w zapytaniu znajduje się nazwa kolumny, a jak ją zmienić, to jest subtelna różnica, w szczególności że:
Cytuj
ob_TowRodzaj = CASE WHEN ob_TowRodzaj = 1 THEN '1' ELSE ob_TowRodzaj END as Rodzaj,
Nie zadziała.

Zapytanie musi mieć formę:
Cytuj
CASE WHEN ob_TowRodzaj = 1 THEN '1' ELSE ob_TowRodzaj END as Rodzaj,
 

A tego że można pominąć na początku wybieraną kolumnę nie wiedziałem. I miałem prawo nie wiedzieć, bo nie jestem żadnym specjalistą od SQL.


Dla początkujących dodam, że zadziała w SSMS, ale nie zadziała w zestawieniu SQL.
Daniel, to jest skopiowane bez pomyślunku zestawienie, zadeklarowane zmienne nie są nawet używane.

I co w związku z tym że skopiowałem gotowe zapytanie i zmodyfikowałem do moich potrzeb. Bo jakbyś się przyjrzał to nie jest w 100% gotowiec. I co z tego że została zadeklarowana zmienna z której nie korzystam? I co z tego że mój SQL jest na miernym poziomie? Na szczęście z powodzeniem zarabiam w inny sposób.

Tak samo jak drugi problem, który nie jest opisany bezpośrednio w manualu. Dla mnie osobiście jest to dziwne, że konwersji dokonuje się po ELSE, a nie bezpośrednio w warunku.

Dlatego też, odpowiedź:
1. Nazwę kolumny masz na początku, przed znakiem równości...
2. '1' na 'pojedynczy towar' zmieniasz najnormalniej wpisując nową wartość, ale musisz dokonać konwersji ob_towRodzaj na ciąg znaków.

Nie ma żadnej merytorycznej wartości, bo o dziwo jest dla mnie oczywista.


Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4876
  • Reputacja +172/-11
Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #14 dnia: Październik 25, 2016, 12:48:23 »
Zapytanie musi mieć formę:
CASE WHEN ob_TowRodzaj = 1 THEN '1' ELSE ob_TowRodzaj END as Rodzaj, 
Nie musi, to jedna z dopuszczalnych form, ale nie jedyna
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Forum Użytkownikow Subiekt GT

Odp: Warunek CASE i zmiana nazwy Kolumny
« Odpowiedź #14 dnia: Październik 25, 2016, 12:48:23 »