2017-12-24 178 views
6

Xem xét một bảng nhưSắp xếp theo x sau đó theo thứ tự theo cột y trong SQL Server

debit credit code 
----------------------------- 
    0  10  5 
    5  0  3 
    0  11  2 
    0  15  1 
    7  0  6 
    6  0  2 
    5  0  1 

tôi cần phải tạo ra một tập hợp kết quả như thế này mà ghi nợ đến trước và sau đó ra lệnh theo cột mã:

debit credit code 
---------------------------- 
5  0  1 
6  0  2 
5  0  3 
7  0  6 
0  15  1 
0  11  2 
0  10  5 
+1

Duplicate của [SQL nhiều cột đặt hàng] (https://stackoverflow.com/questions/2051162/sql-multiple-column-ordering) – Brien

+0

Cảm ơn, nhưng đây là không phải giải pháp vấn đề của tôi, bởi vì tôi cần phải ghi nợ (lớn hơn 0) trước, sau đó đặt hàng bằng ghi nợ và mã số –

+0

ok, vui lòng cập nhật câu hỏi của bạn để nêu rõ hoặc rõ ràng hơn cho người đọc trong tương lai. Cảm ơn! – Brien

Trả lời

6

Bạn có thể sử dụng này.

DECLARE @MyTable TABLE(debit INT, credit INT, code INT) 

INSERT INTO @MyTable VALUES 
(0, 10, 5), 
(5, 0 , 3), 
(0, 11, 2), 
(0, 15, 1), 
(7, 0 , 6), 
(6, 0 , 2), 
(5, 0 , 1) 

SELECT * FROM 
    @MyTable 
ORDER BY 
    (CASE WHEN debit > 0 THEN 0 ELSE 1 END) , 
    code , 
    debit 

Kết quả:

debit  credit  code 
----------- ----------- ----------- 
5   0   1 
6   0   2 
5   0   3 
7   0   6 
0   15   1 
0   11   2 
0   10   5 
+1

Tôi nghĩ kết quả từ truy vấn sẽ không đưa ra kết quả mà OP đang hỏi, trong thứ tự cột đầu tiên bạn nhận được 5,6,5 như thế nào tùy thuộc vào giá trị cột thứ 3 – Rams

+1

Xin chào Giải pháp của tôi có hữu ích không? –

+0

@Đặt hàng trước tiên chỉ cho ghi nợ riêng> 0 hàng. –

0

Sử dụng lựa chọn này để giúp bạn:

SELECT debit, code, credit 
FROM table a 
WHERE debit > 0 
or debit = 0 
order by debit code, credit desc 

hoặc

SELECT debit, code, credit 
FROM table a 
WHERE debit > 0 
or debit = 0 
group by debit, code, credit 
order by debit code, credit desc 
+0

Cảm ơn sự giúp đỡ của bạn, nhưng tôi cần ghi nợ (có số) đến trước và sau đó được sắp xếp theo cột mã, trong khoản tín dụng truy vấn này trước tiên là –

+0

đã được chỉnh sửa cho bạn :) –

+0

Cảm ơn một lần nữa, nó bị ném ngoại lệ này Cột 'mã' không hợp lệ trong danh sách lựa chọn vì nó không được chứa trong hàm tổng hợp hoặc mệnh đề GROUP BY –

2
;WITH Props AS 
(
SELECT *, 
    ROW_NUMBER() OVER (ORDER BY c,cc) AS RowNumber 
FROM Location 

) 
select * from Props order by d desc,RowNumber 

Thử mã trên

WOrking fiddle here

+0

Tôi đã thử nó với dữ liệu gốc và nó không đưa ra kết quả mong đợi hay không. –

+0

ok, Hãy thử sửa lỗi khi tôi sẽ nhận được một số thời gian –

3

Vui lòng sử dụng dưới một trong order by clause bạn sẽ nhận được kết quả mà bạn đang tìm kiếm

order by cast(cast(code as varchar(50)) 
           + cast(debit as varchar(2)+ cast(credit as varchar(2) as int) 
+0

Vì vậy, 'mã'' 5', 'ghi nợ'' 11', 'tín dụng'' 2' sẽ sắp xếp bằng '5',' 1', ' 12'. Điều đó nghe không đúng. – HABO

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