Forum Użytkownikow Subiekt GT

InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: hansikkk w Październik 20, 2016, 14:34:19

Tytuł: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: hansikkk w 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,
Tytuł: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: birds22 w 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.
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: hansikkk w 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ć.
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: birds22 w 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ł...
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: hansikkk w 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?
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: hansikkk w 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
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: Aldo w 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ę.
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: dkozlowski w Październik 24, 2016, 15:11:59
Dla początkujących dodam, że zadziała w SSMS, ale nie zadziała w zestawieniu SQL.
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: hansikkk w 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 +
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: Chris w 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". 
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: Chris w 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.
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: dkozlowski w 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ł.
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: birds22 w 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ł.
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: hansikkk w 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.

Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: candy w 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
Tytuł: Odp: Warunek CASE i zmiana nazwy Kolumny
Wiadomość wysłana przez: dkozlowski w Październik 25, 2016, 16:14:56
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

Zgodnie z odpowiedzią Sławka:

1. Nazwę kolumny masz na początku, przed znakiem równości...

z Twojego kodu:

SELECT
ob_TowRodzaj = CASE WHEN ob_TowRodzaj = 1 THEN '1' ELSE ob_TowRodzaj END,
FROM

otrzymujemy:

Cytuj
SELECT
Rodzaj = CASE WHEN ob_TowRodzaj = 1 THEN '1' ELSE ob_TowRodzaj END,
FROM

Czego można nie zrozumieć - niestety nie rozumiem... Nie jesteś specjalistą od SQL'a - rozumiemy - ale trzeba mieć przynajmniej podstawy, aby próbować realizować takie tematy.