Forum Użytkownikow Subiekt GT
InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: hansikkk w Październik 20, 2016, 14:34:19
-
Witam,
Mam takie zapytanie:
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,
-
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.
-
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ć.
-
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ł...
-
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?
-
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
-
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ę.
-
Dla początkujących dodam, że zadziała w SSMS, ale nie zadziała w zestawieniu SQL.
-
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 +
-
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:
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".
-
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.
-
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ł.
-
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ł.
-
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:
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:
ob_TowRodzaj = CASE WHEN ob_TowRodzaj = 1 THEN '1' ELSE ob_TowRodzaj END as Rodzaj,
Nie zadziała.
Zapytanie musi mieć formę:
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.
-
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
-
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:
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.