Warunek CASE i zmiana nazwy Kolumny MSSQL

0

Witam,

Mam takie zapytanie:

 ob_TowRodzaj = CASE WHEN ob_TowRodzaj = 1 THEN 'Towar' ELSE ob_TowRodzaj END,

Nie umiem następujących rzeczy:

  • nadać kolumnie ob_TowRodzaj nazwy Rodzaj (dodanie na końcu AS Rodzaj daje błąd,
  • użyć właściwie funkcji CONVERT() (muszę przekonwertować ob_TowRodzaj na string, bo jest int)

Oczywiście próbowałem różnych kombinacji, gdy nie ma warunku CASE umiem wszystko zrobić, wykorzystując CASE zapytanie mi się rozsypuje. Będę wdzięczny za pomoc.

Pozdrawiam,

Cale zapytanie:

 DECLARE   @dataDo DATETIME
SET   @DataDo = '20161231'
SELECT 
Year(dok_DataWyst) AS [Year], 
Month(dok_DataWyst) AS [Month],
ob_TowRodzaj = CASE WHEN ob_TowRodzaj = 1 THEN '111' ELSE ob_TowRodzaj END,
 tw_Id AS 'Id towaru', 
tw_Nazwa = CASE WHEN tw_Nazwa = '' THEN '(Brak nazwy towaru)' ELSE 
				CASE WHEN tw_Nazwa IS NULL THEN '(Usługa jednorazowa)' ELSE tw_Nazwa END END, 
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
1

http://rextester.com/NDBUJ99424

create table if not exists p4(ob_TowRodzaj int);

insert into p4 values (1);
insert into p4 values (42);
insert into p4 values (333);

-- select (CASE WHEN ob_TowRodzaj = 1 THEN 'Towar' ELSE ob_TowRodzaj END) as Rodzaj from p4;
select (CASE WHEN ob_TowRodzaj = 1 THEN 'Towar' ELSE convert(ob_TowRodzaj, char(20)) END) as Rodzaj from p4;

drop table p4;
1

A po co w tym zapytanie to przypisanie: "ob_TowRodzaj = "?
Usuń to przypisanie i daj alias:

SELECT 
YEAR(dok_DataWyst) AS [YEAR], 
MONTH(dok_DataWyst) AS [MONTH],
CASE WHEN ob_TowRodzaj = 1 THEN '111' ELSE ob_TowRodzaj END as ob_TowRodzaj,
 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 tw_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
0

Dziękuje za pomoc.

CASE WHEN ob_TowRodzaj = 1 THEN 'Test' ELSE convert(ob_TowRodzaj, char(20)) END AS 'Rodzaj towaru',

Daje błąd:
Type ob_TowRodzaj is not a defined system type.

0

Dziękuję za pomoc, więc działający kod wygląda tak:

DECLARE   @dataDo DATETIME
SET   @DataDo = '20161231'
SELECT 
Year(dok_DataWyst) AS [Year], 
Month(dok_DataWyst) AS [Month],
 
CASE WHEN ob_TowRodzaj = 1 THEN 'Towar' 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
 

1 użytkowników online, w tym zalogowanych: 0, gości: 1