ฉันคิดว่าสิ่งเหล่านี้อาจเป็นประโยชน์สำหรับคุณ
การใช้SELECT
คำสั่งที่มีการCASE
แสดงออกอย่างง่าย
ภายในSELECT
คำสั่งการCASE
แสดงออกอย่างง่ายช่วยให้การตรวจสอบความเท่าเทียมเพียง; ไม่มีการเปรียบเทียบอื่น ๆ ตัวอย่างต่อไปนี้ใช้CASE
นิพจน์เพื่อเปลี่ยนการแสดงหมวดหมู่สายผลิตภัณฑ์เพื่อให้เข้าใจได้ง่ายขึ้น
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
การใช้SELECT
คำสั่งที่มีการCASE
แสดงออกค้นหา
ภายในSELECT
คำสั่งCASE
นิพจน์ที่ค้นหาอนุญาตให้แทนที่ค่าในชุดผลลัพธ์ตามค่าการเปรียบเทียบ ตัวอย่างต่อไปนี้แสดงราคาปลีกเป็นความคิดเห็นข้อความตามช่วงราคาสำหรับผลิตภัณฑ์
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
ในORDER BY
ข้อ
ตัวอย่างต่อไปนี้ใช้CASE
นิพจน์ในORDER BY
ข้อเพื่อกำหนดลำดับการเรียงของแถวตามค่าคอลัมน์ที่กำหนด ในตัวอย่างแรกค่าในคอลัมน์ SalariedFlag ของตาราง HumanResources.Employee จะถูกประเมิน พนักงานที่มีการตั้งค่า SalariedFlag เป็น 1 จะถูกส่งคืนตามลำดับโดย BusinessEntityID ตามลำดับจากมากไปน้อย พนักงานที่มีการตั้งค่า SalariedFlag เป็น 0 จะถูกส่งคืนตามลำดับโดย BusinessEntityID ในลำดับจากน้อยไปหามาก ในตัวอย่างที่สองชุดผลลัพธ์ถูกเรียงลำดับโดยคอลัมน์ TerritoryName เมื่อคอลัมน์ CountryRegionName เท่ากับ 'United States' และตาม CountryRegionName สำหรับแถวอื่น ๆ ทั้งหมด
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;
ใช้CASE
ในUPDATE
งบ
ตัวอย่างต่อไปนี้ใช้CASE
นิพจน์ในUPDATE
คำสั่งเพื่อกำหนดค่าที่กำหนดไว้สำหรับคอลัมน์ VacationHours สำหรับพนักงานที่มี SalariedFlag ตั้งค่าเป็น 0 เมื่อลบ 10 ชั่วโมงจากผลลัพธ์ของ VacationHours ด้วยค่าลบ VacationHours จะเพิ่มขึ้น 40 ชั่วโมง มิฉะนั้นวันหยุดจะเพิ่มขึ้น 20 ชั่วโมง OUTPUT
ประโยคที่ใช้ในการแสดงก่อนและหลังวันหยุดค่า
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
ในHAVING
ข้อ
ตัวอย่างต่อไปนี้ใช้CASE
นิพจน์ในHAVING
ข้อเพื่อ จำกัด แถวที่ส่งคืนโดยSELECT
คำสั่ง คำสั่งส่งคืนอัตรารายชั่วโมงสูงสุดสำหรับแต่ละตำแหน่งงานในตาราง HumanResources.Employee HAVING
ข้อ จำกัด ชื่อให้กับผู้ที่จะมีขึ้นโดยคนที่มีมากขึ้นอัตราค่าจ้างสูงสุดกว่า 40 ดอลลาร์หรือผู้หญิงที่มีมากขึ้นอัตราค่าจ้างสูงสุดกว่า 42 ดอลลาร์
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;
สำหรับคำอธิบายรายละเอียดเพิ่มเติมของตัวอย่างเหล่านี้แวะไปที่แหล่งที่มา
เยี่ยมชมที่นี่และที่นี่เพื่อดูตัวอย่างพร้อมรายละเอียดที่ดีเยี่ยม