Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để biểu thức CASE này đạt được mệnh đề ELSE?

Một số "ngẫu nhiên" mới sẽ được tính cho mọi mệnh đề WHEN - thay vào đó, bạn có thể sử dụng bảng dẫn xuất:

SELECT ID, Name, 
    Channel = 
      CASE Rand
        WHEN 0 THEN 'Baby Only'
        WHEN 1 THEN 'Club'
        WHEN 2 THEN 'Drug'
        WHEN 3 THEN 'Food'
        WHEN 4 THEN 'Internet'
        WHEN 5 THEN 'Liquidators'
        WHEN 6 THEN 'Mass'
        WHEN 7 THEN 'Military'
        WHEN 8 THEN 'Other'
        WHEN 9 THEN 'Speciality'
        ELSE '*NONE*'            -- How is this ever getting reached?
      END
FROM
(   SELECT 
         id,
         name,
         ABS(CHECKSUM(NewId())) % 10 Rand
    FROM   
        retailshelf_nil...account A
) zzz;

hoặc truy vấn con ÁP DỤNG CHÉO DÀI:

SELECT A.ID, A.Name, 
    Channel = 
      CASE zzz.Rand
        WHEN 0 THEN 'Baby Only'
        WHEN 1 THEN 'Club'
        WHEN 2 THEN 'Drug'
        WHEN 3 THEN 'Food'
        WHEN 4 THEN 'Internet'
        WHEN 5 THEN 'Liquidators'
        WHEN 6 THEN 'Mass'
        WHEN 7 THEN 'Military'
        WHEN 8 THEN 'Other'
        WHEN 9 THEN 'Speciality'
        ELSE '*NONE*'            -- How is this ever getting reached?
      END
FROM
    retailshelf_nil...account A
CROSS APPLY
(   SELECT 
        ABS(CHECKSUM(NewId())) % 10
) zzz (Rand);

Bằng cách đó NewID() chỉ được gọi một lần cho mỗi bản ghi.

Một scneario tương tự đã được giải quyết tại đây .

Tài liệu T-SQL giải thích hiện tượng này (được cấp cho Sybase nhưng dường như vẫn áp dụng cho SQL Server):



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tập lệnh được cải tiến trả về tất cả các thuộc tính từ SERVERPROPERTY () trong SQL Server

  2. Mvc-Mini-Profiler v1.7 trên dự án EF 4.1 Code-First không cấu hình SQL

  3. Tương đương với MySQL TRÊN CẬP NHẬT KHÓA DUPLICATE trong Sql Server

  4. Tìm kiếm số lượng từ trong một chuỗi bằng SQL

  5. Làm cách nào để thay đổi kích thước trang của SQL Server?