2011-10-24 66 views
11

Tôi có hai bảng. Khác biệt trong đó một kho lưu trữ là một bảng và người kia giữ bản ghi hiện tại. Đây là những bảng ghi nhận doanh số bán hàng trong công ty. Trong cả hai chúng tôi có trong số các lĩnh vực khác: id, tên, giá bán. Tôi cần phải chọn từ cả hai bảng, giá cao nhất và thấp nhất cho một tên nhất định. Tôi đã cố gắng thực hiện với truy vấn:chọn giá trị lớn nhất, tối thiểu từ hai bảng

select name, max (price_of_sale), min (price_of_sale) 
from wapzby 
union 
select name, max (price_of_sale), min (price_of_sale) 
from wpzby 
order by name 

nhưng yêu cầu như vậy thu hút tôi hai bản ghi - một trong bảng hiện tại, một lưu trữ bảng. Tôi muốn chọn tên cho giá nhỏ nhất và lớn nhất ngay lập tức từ cả hai bảng. Làm cách nào để nhận được truy vấn này?

+2

SQL gì động cơ này là gì? Để mắt của tôi bạn đang thiếu một GROUP BY (để tổng hợp MIN và MAX xung quanh mỗi 'tên' riêng biệt) và một mệnh đề WHERE (để hạn chế chỉ là một 'tên'). – pilcrow

Trả lời

1

Điều này có giống như những gì bạn muốn không?

SELECT 
    a.name, 
    MAX (a.price_of_sale), 
    MIN (a.price_of_sale) , 
    b.name, 
    MAX (b.price_of_sale), 
    MIN (b.price_of_sale) 
FROM 
    wapzby a, 
    wpzby b 
ORDER BY 
    a.name 

Đó là chưa được kiểm tra nhưng phải trả lại tất cả hồ sơ của bạn trên một hàng mà không cần một liên minh

+0

Nếu có bia trong một, và pho mát trong b ... Ông sẽ nhận được một hàng trong kết quả về bia và pho mát. Tôi không nghĩ rằng tham gia cartes là những gì anh ta muốn. –

6

Trong SQL Server bạn có thể sử dụng một subquery:

SELECT [name], 
     MAX([price_of_sale]) AS [MAX price_of_sale], 
     MIN([price_of_sale]) AS [MIN price_of_sale] 
FROM (
    SELECT [name], 
      [price_of_sale] 
    FROM [dbo].[wapzby] 
    UNION 
    SELECT [name], 
      [price_of_sale] 
    FROM [dbo].[wpzby] 
) u 
GROUP BY [name] 
ORDER BY [name] 
22

Dưới đây là hai lựa chọn (MSSQL compliant)

Lưu ý: UNION ALL sẽ kết hợp các bộ mà không loại bỏ trùng lặp. Đó là một hành vi đơn giản hơn nhiều so với UNION.

SELECT Name, MAX(Price_Of_Sale) as MaxPrice, MIN(Price_Of_Sale) as MinPrice 
FROM 
(
    SELECT Name, Price_Of_Sale 
    FROM wapzby 
    UNION ALL 
    SELECT Name, Price_Of_Sale 
    FROM wpzby 
) as subQuery 
GROUP BY Name 
ORDER BY Name 

Điều này chỉ ra tối đa và phút từ mỗi bảng trước khi kết hợp bộ - có thể có hiệu suất cao hơn để thực hiện theo cách này.

SELECT Name, MAX(MaxPrice) as MaxPrice, MIN(MinPrice) as MinPrice 
FROM 
(
    SELECT Name, MAX(Price_Of_Sale) as MaxPrice, MIN(Price_Of_Sale) as MinPrice 
    FROM wapzby 
    GROUP BY Name 
    UNION ALL 
    SELECT Name, MAX(Price_Of_Sale) as MaxPrice, MIN(Price_Of_Sale) as MinPrice 
    FROM wpzby 
    GROUP BY Name 
) as subQuery 
GROUP BY Name 
ORDER BY Name 
+0

Cảm ơn - đây là những gì tôi muốn – BKl

1
SELECT MAX(value) FROM tabl1 UNION SELECT MAX(value) FROM tabl2; 
SELECT MIN(value) FROM tabl1 UNION SELECT MIN(value) FROM tabl2; 
+0

Có lẽ nó sẽ giúp đỡ nếu bạn mô tả những gì mà sql hiện và định dạng nó cho dễ đọc. –

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