TSQL ROW_NUMBER() OVER (PARTITION BY… ORDER BY…)

跟風遠走 提交于 2019-12-11 12:14:31

问题


Can I do row_number without partition? (see data at end of post) I can use this statement to get an ORDER#.

     ROW_NUMBER() OVER (PARTITION BY LOG_ID ORDER BY ORDER_ID) 

Any suggestions to get the LOG# ?

-LOG#   ORDER#  LOG_ID  ORDER_ID
-1      1       340580  387373215
-1      2       340580  387373225
-2      1       340925  387812330
-3      1       340935  388093450
-4      1       340945  387615845
-5      1       340990  386433405
-6      1       341675  376247120
-6      2       341675  376247130
-6      3       341675  388352445

回答1:


SELECT
    - DENSE_RANK() OVER (ORDER BY LOG_ID) AS "#LOG",
    ROW_NUMBER() OVER (PARTITION BY LOG_ID ORDER BY ORDER_ID) AS "#ORDER",
    LOG_ID,
    ORDER_ID
FROM UnnamedTable



回答2:


declare @yourtable table ([ORDER#] int, LOG_ID int, ORDER_ID bigint);
insert @yourtable values
(1,340580,387373215),
(2,340580,387373225),
(1,340925,387812330),
(1,340935,388093450),
(1,340945,387615845),
(1,340990,386433405),
(1,341675,376247120),
(2,341675,376247130),
(3,341675,388352445);


select [-LOG#] = -dense_rank() over (order by LOG_ID), *
from @yourtable;

Returns

-LOG#                ORDER#      LOG_ID      ORDER_ID
-------------------- ----------- ----------- --------------------
-1                   1           340580      387373215
-1                   2           340580      387373225
-2                   1           340925      387812330
-3                   1           340935      388093450
-4                   1           340945      387615845
-5                   1           340990      386433405
-6                   1           341675      376247120
-6                   2           341675      376247130
-6                   3           341675      388352445

Edit: @bacon bits beat me to it. :(



来源:https://stackoverflow.com/questions/47317424/tsql-row-number-over-partition-by-order-by

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!