Trong Oracle (trường hợp có hỗ trợ UNPIVOT)
SELECT MyID, MAX(GreatestVal)
FROM figures
UNPIVOT (
GreatestVal
FOR MyID
IN (col_1, col_2, col_3,...)
);
Oracle truy vấn là chưa được kiểm tra bởi vì Tôi không có một ví dụ tiện dụng Các chi tiết khác về trục xoay là located here và nó hoạt động giống như trục xoay của Máy chủ SQL.
MySQL tôi không chắc chắn làm thế nào để làm điều này trong MySQL nhưng có thể điều tra như tôi có cơ hội
Sau đây là SQL Server câu trả lời (trừ khi ai đó đánh bại tôi để nó ;-).):
Thực hiện nó trong UDF không đẹp vì tất cả các tham số đầu vào sẽ được YÊU CẦU trong mọi trường hợp. Nếu bạn có thể lấy đi với việc thực hiện nó như là một thủ tục lưu sẵn thì bạn có thể chỉ định các giá trị mặc định cho các tham số đầu vào và gọi nó với một số cột động. Dù bằng cách nào, bạn sẽ phải quyết định số lượng tham số đầu vào tối đa. Dưới đây là một ví dụ trong UDF trên SQL Server:
SELECT dbo.GREATESTof3(col_1, col_2, col_3)
FROM figures;
CREATE FUNCTION GREATESTof3(@col_1 sql_variant = null, @col_2 sql_variant = null, @col_3 sql_variant = null)
RETURNS sql_variant
AS
BEGIN
DECLARE @GreatestVal sql_variant
DECLARE @ColumnVals TABLE (Candidate sql_variant)
INSERT INTO @ColumnVals
SELECT @col_1
UNION ALL
SELECT @col_2
UNION ALL
SELECT @col_3
SELECT @GreatestVal = MAX(Candidate)
FROM @ColumnVals
RETURN @GreatestVal
END
này sẽ đòi hỏi một UDF mới cho mỗi biến thể của số lượng các thông số đầu vào HOẶC tạo một mà có thể mất một số lượng lớn hơn nhưng sau đó trong cuộc gọi đến UDF bạn sẽ phải chỉ định một số giá trị cho mỗi tham số không sử dụng (null) hoặc chỉ định mặc định.
Alternatives:
này mang đến cho bạn giá trị tối đa của ba cột từ toàn bộ bảng và sẽ dễ dàng hơn để có một số năng động của cột:
SELECT MAX([Value]) AS Greatest
FROM figures
UNPIVOT
(
[Value]
FOR ColumnName IN ([Col_1], [Col_2], [Col_3])
) AS unpvt
Giả sử bạn có một số rowid hoặc một cột khác mà bạn muốn ở đầu ra để bạn có thể nhận được giá trị lớn nhất từ các cột được chỉ định cho mỗi hàng bạn có thể làm như sau:
SELECT RowID, MAX([Value]) AS Greatest
FROM figures
UNPIVOT
(
[Value]
FOR ColumnName IN ([Col_1], [Col_2], [Col_3])
) AS unpvt
GROUP BY RowID
Đây có phải là giống như - chọn * from, order by x desc/asc Giá trị tối đa phải là giá trị đầu tiên/cuối cùng? Ngay cả trong XSLt, tôi chỉ sắp xếp mọi thứ để có được giá trị tối đa? – Mike
Có lẽ bạn có nghĩa là SQL Server - SQL (không có trình độ tiếp theo) đề cập đến một ngôn ngữ, được thực hiện với các mức độ khác nhau theo các sản phẩm khác nhau. –
Đây là một cách để xử lý tốt hơn câu lệnh 'case'. http://stackoverflow.com/questions/7995945/how-to-i-modify-this-t-sql-query-to-return-the-maximum-value-for-different-colum/7996068#7996068 –