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

TSQL chọn một hoặc nhiều hàng để tham gia

Bạn có thể lọc địa chỉ dễ dàng ([group] IN (48,59,60,87) OR Verified = 1) , nhưng điều chỉnh TOP 1 sẽ khiến mọi thứ trở nên vô lý (TOP (case when [group] IN (48,59,60,87) then 1 else (select count(*) from addresses where order_Id = o.order_Id) end) . Vì vậy, tôi đề xuất rằng bạn nên union all nhưng chỉ dành cho các địa chỉ:

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

P.S. Nếu đơn hàng có thể không có địa chỉ, hãy thay thế ÁP DỤNG CROSS bằng ÁP DỤNG NGOÀI TRỜI.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. lặp lại dữ liệu XML trong sql server 2005

  2. SQL thay thế tất cả các NULL

  3. Tạo khóa chính tổng hợp trong SQL Server

  4. Cách thay đổi cấu hình thư cơ sở dữ liệu mặc định cho người dùng trong SQL Server (T-SQL)

  5. Truy xuất lỗi cụ thể của công việc SQL Agent