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

प्राथमिकता के आधार पर क्वेरी का चयन करें

रैंक , ROW_NUMBER के बजाय, क्योंकि आप चाहते हैं कि संबंध (समान B मान वाले) समान रैंक मान वाले हों:

WITH summary AS (
  SELECT t.*,
         RANK() OVER (PARTITION BY t.id 
                          ORDER BY t.value_type DESC) AS rank
    FROM TABLE t
   WHERE t.value_type IN ('A', 'B'))
SELECT s.id,
       s.value,
       s.value_type,
       s.data
  FROM summary s
 WHERE s.rank = 1

गैर सीटीई संस्करण:

SELECT s.id,
       s.value,
       s.value_type,
       s.data
  FROM (SELECT t.*,
               RANK() OVER (PARTITION BY t.id 
                                ORDER BY t.value_type DESC) AS rank
          FROM TABLE t
         WHERE t.value_type IN ('A', 'B')) s
 WHERE s.rank = 1
WITH test AS (
   SELECT 1 AS id, 'B' AS value_type
   UNION ALL
   SELECT 1, 'B'
   UNION ALL
   SELECT 1, 'A'
   UNION ALL
   SELECT 2, 'A'
   UNION ALL
   SELECT 2, 'A'),
     summary AS (
   SELECT t.*,
          RANK() OVER (PARTITION BY t.id 
                           ORDER BY t.value_type DESC) AS rank
     FROM test t)
SELECT *
  FROM summary
 WHERE rank = 1

मुझे मिलता है:

id   value_type  rank
----------------------
1    B           1
1    B           1
2    A           1
2    A           1


  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 सर्वर 2019 स्थापित करें

  2. क्रिस्टल रिपोर्ट में लिंक को नई विंडो में खोलें

  3. डेटाबेस मेल प्रोफ़ाइल (SSMS) हटाएं

  4. इंटरनेट कनेक्शन का उपयोग करके SQL सर्वर से कैसे कनेक्ट करें

  5. SQL 2008 में किसी तालिका को छोड़े बिना किसी स्तंभ को कैसे बदलें?