de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
fadzli feizal
fadzli feizal
Question

Przypadek w zestawieniu Select

Mam instrukcję SQL, która ma CASE z SELECT i po prostu nie mogę'dostać tego dobrze. Czy możecie mi pokazać przykład CASE, gdzie przypadki są warunkami, a wyniki są z przypadków. Na przykład:

     Select xxx, yyy
     case : desc case when bbb then 'blackberry';
     when sss then 'samsung';
     end 
     from (select ???? .....

gdzie wyniki pokazują

 name                         age       handphone
xxx1                         yyy1      blackberry
xxx2                         yyy2      blackberry
136 2013-01-07T02:51:59+00:00 3
 bobs
bobs
Edytowane pytanie 7. stycznia 2013 в 4:13
Programowanie
sql
case
sql-server
NuNn DaDdY
NuNn DaDdY
7. stycznia 2013 в 3:21
2013-01-07T03:21:28+00:00
Więcej
Źródło
Edytuj
#18150176

MSDN jest dobrym punktem odniesienia dla tego typu pytań dotyczących składni i użytkowania. To jest z Transact SQL Reference - CASE page.

http://msdn.microsoft.com/en-us/library/ms181765.aspx

USE AdventureWorks2012;
GO
SELECT   ProductNumber, Name, "Price Range" = 
  CASE 
     WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
     WHEN ListPrice < 50 THEN 'Under $50'
     WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
     WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
     ELSE 'Over $1000'
  END
FROM Production.Product
ORDER BY ProductNumber ;
GO

Inną dobrą stroną, którą możesz chcieć sprawdzić, jeśli używasz SQL Server jest SQL Server Central. Zawiera ona wiele różnych zasobów dla każdego obszaru SQL Server, którego chciałbyś się nauczyć.

186
0
Sabir  Al Fateh
Sabir Al Fateh
16. listopada 2015 в 12:53
2015-11-16T00:53:48+00:00
Więcej
Źródło
Edytuj
#18150178

Myślę, że to może być pomocne dla Ciebie .

Użycie instrukcji SELECT z prostym wyrażeniem CASE.

Wewnątrz instrukcji SELECT, proste wyrażenie CASE pozwala tylko na sprawdzenie równości; żadne inne porównania nie są wykonywane. Poniższy przykład używa wyrażenia CASE do zmiany wyświetlania kategorii linii produktów, tak aby były bardziej zrozumiałe.

USE AdventureWorks2012;
GO
SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO

Użycie instrukcji SELECT z przeszukiwanym wyrażeniem CASE.

Wewnątrz instrukcji SELECT, przeszukiwane wyrażenie CASE pozwala na zamianę wartości w zestawie wyników na podstawie wartości porównania. Poniższy przykład wyświetla cenę katalogową jako komentarz tekstowy na podstawie zakresu cen dla produktu.

USE AdventureWorks2012;
GO
SELECT   ProductNumber, Name, "Price Range" = 
      CASE 
         WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
         WHEN ListPrice < 50 THEN 'Under $50'
         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
         ELSE 'Over $1000'
      END
FROM Production.Product
ORDER BY ProductNumber ;
GO

Użycie CASE w klauzuli ORDER BY.

Poniższe przykłady wykorzystują wyrażenie CASE w klauzuli ORDER BY do określenia kolejności sortowania wierszy na podstawie wartości danej kolumny. W pierwszym przykładzie, wartość w kolumnie SalariedFlag w tabeli HumanResources.Employee jest obliczana. Pracownicy, którzy mają ustawioną flagę SalariedFlag na 1 są zwracani w kolejności według BusinessEntityID w porządku malejącym. Pracownicy, którzy mają ustawioną flagę SalariedFlag na 0 są zwracani w kolejności według BusinessEntityID w kolejności rosnącej. W drugim przykładzie zestaw wyników jest uporządkowany według kolumny TerritoryName, gdy kolumna CountryRegionName jest równa 'United States' i według CountryRegionName dla wszystkich innych wierszy.

SELECT BusinessEntityID, SalariedFlag
FROM HumanResources.Employee
ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC
        ,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;
GO

SELECT BusinessEntityID, LastName, TerritoryName, CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY CASE CountryRegionName WHEN 'United States' THEN TerritoryName
         ELSE CountryRegionName END;

Użycie CASE w instrukcji UPDATE.

Poniższy przykład używa wyrażenia CASE w instrukcji UPDATE w celu określenia wartości ustawianej dla kolumny VacationHours dla pracowników z SalariedFlag ustawioną na 0. Jeśli odjęcie 10 godzin od VacationHours daje wartość ujemną, VacationHours jest zwiększane o 40 godzin; w przeciwnym wypadku VacationHours jest zwiększane o 20 godzin. Klauzula OUTPUT jest używana do wyświetlania wartości przed i po urlopie.

USE AdventureWorks2012;
GO
UPDATE HumanResources.Employee
SET VacationHours = 
    ( CASE
         WHEN ((VacationHours - 10.00) < 0) THEN VacationHours + 40
         ELSE (VacationHours + 20.00)
       END
    )
OUTPUT Deleted.BusinessEntityID, Deleted.VacationHours AS BeforeValue, 
       Inserted.VacationHours AS AfterValue
WHERE SalariedFlag = 0; 

Użycie CASE w klauzuli HAVING.

Poniższy przykład używa wyrażenia CASE w klauzuli HAVING do ograniczenia wierszy zwracanych przez instrukcję SELECT. Polecenie zwraca maksymalną stawkę godzinową dla każdej nazwy stanowiska w tabeli HumanResources.Employee. Klauzula HAVING ogranicza tytuły do tych, które są zajmowane przez mężczyzn z maksymalną stawką wynagrodzenia większą niż 40 dolarów lub kobiety z maksymalną stawką wynagrodzenia większą niż 42 dolary.

USE AdventureWorks2012;
GO
SELECT JobTitle, MAX(ph1.Rate)AS MaximumRate
FROM HumanResources.Employee AS e
JOIN HumanResources.EmployeePayHistory AS ph1 ON e.BusinessEntityID = ph1.BusinessEntityID
GROUP BY JobTitle
HAVING (MAX(CASE WHEN Gender = 'M' 
        THEN ph1.Rate 
        ELSE NULL END) > 40.00
     OR MAX(CASE WHEN Gender  = 'F' 
        THEN ph1.Rate  
        ELSE NULL END) > 42.00)
ORDER BY MaximumRate DESC;

Więcej szczegółów dotyczących tego przykładu można znaleźć na stronie źródło.

Odwiedź również tutaj i tutaj dla kilku przykładów z dużą ilością szczegółów.

Sabir  Al Fateh
Sabir Al Fateh
Edytowana odpowiedź 3. lutego 2018 в 1:34
77
0
 user5035983
user5035983
22. czerwca 2015 в 11:31
2015-06-22T11:31:21+00:00
Więcej
Źródło
Edytuj
#18150177

można również użyć:

SELECT CASE
         WHEN upper(t.name) like 'P%' THEN
          'productive'
         WHEN upper(t.name) like 'T%' THEN
          'test'
         WHEN upper(t.name) like 'D%' THEN
          'development'
         ELSE
          'unknown'
       END as type
FROM table t
12
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
Zuxriddin Muydinov
Zarejestrowany 11 godzin temu
2
Денис Анненский
Zarejestrowany 2 dni temu
3
365
Zarejestrowany 1 tydzień temu
4
True Image
Zarejestrowany 1 tydzień temu
5
archana agarwal
Zarejestrowany 1 tydzień temu
DA
DE
EL
ES
FR
ID
IT
JA
KO
LV
NL
PL
PT
RU
SK
SL
TR
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem