SELECT 中的简写 CASE

CASE 的简写变体根据一系列值来计算表达式(通常是一列)。此变体稍短,并且可以一次又一次地重复评估表达式。但是仍然可以使用 ELSE 子句:

SELECT Id, ItemId, Price,
  CASE Price WHEN 5  THEN 'CHEAP'
             WHEN 15 THEN 'AFFORDABLE'
             ELSE         'EXPENSIVE'
  END as PriceRating
FROM ItemSales

提醒一句。重要的是要意识到,当使用短变量时,整个语句将在每个 WHEN 进行评估。因此以下声明:

SELECT 
    CASE ABS(CHECKSUM(NEWID())) % 4
        WHEN 0 THEN 'Dr'
        WHEN 1 THEN 'Master'
        WHEN 2 THEN 'Mr'
        WHEN 3 THEN 'Mrs'
    END

可能会产生一个 NULL 的结果。那是因为在每个时代都会再次调用 NEWID() 并获得新的结果。相当于:

SELECT 
    CASE 
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 0 THEN 'Dr'
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 1 THEN 'Master'
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 2 THEN 'Mr'
        WHEN ABS(CHECKSUM(NEWID())) % 4 = 3 THEN 'Mrs'
    END

因此,它可以错过所有的 WHEN 案例,结果为 NULL