Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

यह CASE अभिव्यक्ति ELSE खंड तक कैसे पहुँचती है?

प्रत्येक WHEN क्लॉज के लिए एक नई "यादृच्छिक" संख्या की गणना की जाएगी - इसके बजाय आप एक व्युत्पन्न तालिका का उपयोग कर सकते हैं:

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;

या क्रॉस अप्लाई सबक्वेरी:

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

इस तरह NewID() प्रति रिकॉर्ड केवल एक बार कहा जाता है।

एक समान परिदृश्य का समाधान किया गया यहां

T-SQL दस्तावेज़ इस घटना की व्याख्या करता है (दी गई है कि यह Sybase के लिए है लेकिन जाहिरा तौर पर अभी भी SQL सर्वर पर लागू होता है):



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में SCHEMA_ID () कैसे काम करता है

  2. TSQL में अशक्त प्राथमिक कुंजी का उपयोग क्यों नहीं करें?

  3. SQL सर्वर में पॉलीमॉर्फिक एसोसिएशन को लागू करने का सबसे अच्छा तरीका क्या है?

  4. SQL सर्वर में इसकी आईडी से कॉलम का नाम प्राप्त करें:COL_NAME ()

  5. #tables . के साथ Object_id () फ़ंक्शन का उपयोग करना