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

TSQL में शामिल होने के लिए एक या कई पंक्तियों का चयन करें

आप आसानी से पतों को फ़िल्टर कर सकते हैं ([group] IN (48,59,60,87) OR Verified = 1) , लेकिन TOP 1 में बदलाव करना चीजों को हास्यास्पद बना देगा (TOP (case when [group] IN (48,59,60,87) then 1 else (select count(*) from addresses where order_Id = o.order_Id) end) . इसलिए मेरा प्रस्ताव है कि आप union all do करें लेकिन केवल पतों के लिए:

SELECT TOP 1000 o.order_Id
              , a.Address_Id
              , a.Zip
            --, *
FROM orders o
CROSS APPLY
(
 select TOP 1
        a.Address_Id,
        a.Zip
   from address a
  WHERE a.order_Id = o.order_Id
    AND o.[group] IN (48,59,60,87)
  ORDER BY case a.Type 
                when 'D2' then 1 
                when 'K1' then 2 
                else 3 
            end,
        a.ADD_DATE
  UNION ALL
 select 
        a.Address_Id,
        a.Zip
   from address a
  WHERE a.order_Id = o.order_Id
    AND o.[group] NOT IN (48,59,60,87)
    AND Verified = 1
) a
WHERE
 o.Status NOT IN (4, 6)
 AND code1='002'
 AND ((code2 IS NULL AND code3 IS NULL) 
    OR (code2 IN ('BIGA', 'BIGP') AND code3 IS NULL) 
    OR (code2 IS NULL AND code3 = 'L'))

पी.एस. यदि आदेश में कोई पता नहीं है, तो क्रॉस एप्लाई को OUTER APPLY से बदल दें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLSERVER में लिस्टएजीजी

  2. SQL तालिका में SQL DELETE कथन का उपयोग करने के सर्वोत्तम तरीके

  3. SQL सर्वर लेनदेन लॉग, भाग 2:लॉग आर्किटेक्चर

  4. डेटटाइम टू टाइम कास्ट कैसे करें

  5. कार्य बनाम संग्रहीत कार्यविधियाँ