Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana ekspresi CASE ini mencapai klausa ELSE?

Angka "acak" baru akan dihitung untuk setiap klausa WHEN - Anda dapat menggunakan tabel turunan:

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;

atau subkueri CROSS APPLY:

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);

Dengan begitu NewID() dipanggil hanya sekali per record.

Skenario serupa telah diselesaikan di sini .

Dokumentasi T-SQL menjelaskan fenomena ini (memang ini untuk Sybase tetapi tampaknya masih berlaku untuk 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. Prosesor AMD EPYC 7002 Series dan SQL Server

  2. Cara memeriksa tanggal perubahan terakhir dalam prosedur atau fungsi tersimpan di SQL server

  3. PARSE() vs TRY_PARSE() di SQL Server:Apa Bedanya?

  4. Dilema Penamaan Tabel:Nama Tunggal vs. Nama Jamak

  5. Mendefinisikan hubungan satu-ke-satu di SQL Server