我有一张这样的桌子..
Priority | Amount | Case
P1 | 100 | 1
P1 | 200 | 2
P1 | 300 | 1
P3 | 400 | 3
我想首先按Priority
和Amount
(降序)然后Case
订购,看起来像这样。
Priority | Amount | Case
P1 | 300 | 1
P1 | 100 | 1
P1 | 200 | 2
P3 | 400 | 3
如果我使用ORDER BY Priority, Amount DESC, Case
,则返回此值。 Case
未根据最高Amount
值组合在一起的位置。
Priority | Amount | Case
P1 | 300 | 1
P1 | 200 | 2
P1 | 100 | 1
P3 | 400 | 3
编辑:为清晰起见,再添加一条记录:
Priority | Amount | Case
P1 | 100 | 1
P1 | 200 | 2
P1 | 300 | 1
P1 | 200 | 0 << New record
P3 | 400 | 3
这应该返回:
Priority | Amount | Case
P1 | 300 | 1
P1 | 100 | 1
P1 | 200 | 0
P1 | 200 | 2
P3 | 400 | 3
首先按Priority
分组,其中按最高Amount
排序,然后按Amount
分组Case
答案 0 :(得分:2)
您需要使用窗口化聚合来查找每个Case
中的最高金额,然后使用 进行排序:
declare @t table ([Priority] varchar(19) not null,Amount int not null, [Case] int not null)
insert into @t ([Priority],Amount,[Case]) values
('P1',100,1),
('P1',200,2),
('P1',300,1),
('P1',200,0),
('P3',400,3)
select
*
from
(
select *,MAX(Amount) OVER (PARTITION BY [Case]) as mAmount
from @t
) t
order by [Priority],mAmount desc,[Case],Amount desc
结果:
Priority Amount Case mAmount
------------------- ----------- ----------- -----------
P1 300 1 300
P1 100 1 300
P1 200 0 200
P1 200 2 200
P3 400 3 400
另外,请考虑重新命名一些列 - 我必须在[]
括号中包含两个列,因为它们是保留字。通常最好完全避免使用保留字。
答案 1 :(得分:1)
CREATE TABLE SHANKATABLE (PRIORITY VARCHAR(2), AMOUNT INT, [CASE] INT)
INSERT INTO SHANKATABLE VALUES('P1', 100 , 1)
INSERT INTO SHANKATABLE VALUES ('P1', 200 , 2)
INSERT INTO SHANKATABLE VALUES ('P1', 300 , 1)
INSERT INTO SHANKATABLE VALUES ('P3', 400 , 3)
要获得第一个结果,只需使用以下查询,
基于Damien_The_Unbeliever回答,我只是更新我的回答。
SELECT PRIORITY,[CASE],AMOUNT
FROM (
SELECT PRIORITY,[CASE],AMOUNT,MAX(Amount) OVER(PARTITION BY [Case]) AS mAmount
FROM SHANKATABLE
) Temp
ORDER BY
[Priority],mAmount DESC,[Case],Amount DESC
答案 2 :(得分:0)
我想你想要这个
select * from tablename ORDER BY Priority, [case] , Amount DESC
答案 3 :(得分:0)
标识符不能是SQL中的保留关键字,不能包含嵌入空格,也不能包含补充字符。
必须分隔不符合这些规则的标识符。
例如,名为2006的属性被视为不规则标识符,因为它以数字开头,因此必须分隔为&#34; 2006&#34;或[2006]。诸如y2006之类的常规标识符可以在没有分隔符的情况下简单地引用为y2006,或者它可以是带分隔符的可选项。您可能不希望划分常规标识符,因为分隔符会使代码混乱。
答案 4 :(得分:0)
试试这个: -
2016-01-07 07:10:22,200 4198 ERROR None openerp.http: Exception during JSON request handling.
Traceback (most recent call last):
File "/opt/odoo/openerp/http.py", line 518, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/odoo/openerp/http.py", line 1358, in _dispatch_nodb
func, arguments = self.nodb_routing_map.bind_to_environ(request.httprequest.environ).match()
File "/usr/lib/python2.7/dist-packages/werkzeug/routing.py", line 1433, in match
raise NotFound()
NotFound: 404: Not Found