Bunların sizin için yararlı olabileceğini düşünüyorum.
Bir Kullanarak SELECT
basit beyanına CASE
ifadesi
Bir SELECT
ifade içinde , basit bir CASE
ifade sadece bir eşitlik kontrolüne izin verir; başka karşılaştırma yapılmaz. Aşağıdaki örnek CASE
, ürün satırı kategorilerinin görüntülenmesini daha anlaşılır hale getirmek için ifadeyi kullanır .
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
Bir Kullanarak SELECT
Bir arandı beyanına CASE
ifadesi
Bir SELECT
ifade içinde , aranan CASE
ifade, karşılaştırma kümesine dayalı olarak sonuç kümesinde değerlerin değiştirilmesine izin verir. Aşağıdaki örnek, liste fiyatını, bir ürünün fiyat aralığına göre metin yorumu olarak görüntüler.
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
CASE
Bir ORDER BY
cümlede kullanma
Aşağıdaki örnekler, belirli bir sütun değerine göre satırların sıralama düzenini belirlemek için CASE
bir ORDER BY
cümledeki ifadeyi kullanır . İlk örnekte, HumanResources.Employee tablosunun SalariedFlag sütunundaki değer değerlendirilir. SalariedFlag değerini 1 olarak ayarlayan çalışanlar, BusinessEntityID tarafından azalan sırada döndürülür. SalariedFlag değerini 0 olarak ayarlayan çalışanlar, BusinessEntityID tarafından sırasıyla artan sırada döndürülür. İkinci örnekte, CountryRegionName sütunu 'Amerika Birleşik Devletleri'ne eşit olduğunda sonuç kümesi TerritoryName sütunu ve diğer tüm satırlar için CountryRegionName tarafından sıralanır.
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;
Kullanma CASE
bir in UPDATE
deyimi
Aşağıdaki örnek, SalariedFlag değeri 0 olarak ayarlanmış çalışanlar için VacationHours sütunu için ayarlanan değeri belirlemek üzere CASE
bir ifadedeki ifadeyi kullanır. UPDATE
VacationHours'tan 10 saat çıkarıldığında, negatif bir değer elde edilir; aksi takdirde VacationHours 20 saat arttırılır. OUTPUT
Fıkra öncesi ve tatil değerlerine sonra görüntülemek için kullanılır.
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;
CASE
Bir HAVING
cümle içinde kullanma
Aşağıdaki örnek, CASE
deyim HAVING
tarafından döndürülen satırları sınırlamak için bir cümledeki ifadeyi kullanır SELECT
. İfade, HumanResources.Employee tablosundaki her iş unvanı için maksimum saatlik ücreti döndürür. HAVING
Fıkra 42 dolar daha fazla ödeme oranı daha sonra ile 40 dolar ya da kadınlar daha fazla ödeme oranı daha sonra ile erkekler tarafından elde tuttuğu için başlıklar kısıtlar.
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;
Bu örneğin ayrıntılı açıklaması için kaynağı ziyaret edin .
Ayrıca ziyaret burada ve burada çok detaylı bazı örnekler için.