2011-10-16 33 views
6

Sử dụng Sql ServerLàm thế nào để nhận được giá trị tối đa từ 2 bảng

Tôi muốn nhận được giá trị tối đa từ hai bảng

Table1

ID Total 

101 100 
102 600 
..... 

Table2

ID Total 

101 300 
102 400 
.... 

Tôi muốn nhận giá trị tối đa từ 2 bảng theo id

Dự kiến ​​Output

ID Total 

101 300 (max value in table2) 
102 600 (max value in table1) 
.... 
... 

Làm thế nào để thực hiện một truy vấn

Cần Query Trợ giúp

Trả lời

9
SELECT 
    ID, MAX(Total) 
FROM 
    (
    SELECT ID, Total FROM Table1 
    UNION ALL 
    SELECT ID, Total FROM Table2 
    ) foo 
GROUP BY 
    ID 
2
; with 
q_00 as (
select id, Total from Tbl_1 
union all 
select id, Total from Tbl_2 
) 
select id, max(Total) 
from q_00 
group by id 
order by id ; 
1

Một lựa chọn khác đáng xem xét có thể là

WITH T(ID, Total) 
    AS (SELECT ID, 
       MAX(Total) 
     FROM Table1 
     GROUP BY ID 
     UNION ALL 
     SELECT ID, 
       MAX(Total) 
     FROM Table2 
     GROUP BY ID) 
SELECT ID, 
     MAX(Total) AS Total 
FROM T 
GROUP BY ID 

Nếu ID,Total được lập chỉ mục trong hai bảng có thể điều này có thể cung cấp một kế hoạch tốt hơn (chưa được kiểm tra)

+0

Mặc dù hiện đã được kiểm tra và sự khác biệt giữa hai giá trị này là khá nhỏ và có thể bị lệch bằng cách điều chỉnh số 'Tổng' hàng trong mỗi bảng. ID nhóm. –

Các vấn đề liên quan