Select 根据同一 table 上的两个不同字段记录可变次数
Select a record a variable number of times based on two different fields on the same table
我不是 ANSI 专家SQL,我需要编写以下查询。
这是我开始的table:
ID
Max_Recurrency
Priority
abc
2
1
abc
2
450
abc
2
12
def
1
827
def
1
44
def
1
112
ghi
2
544
ghi
2
4
ghi
2
95
ghi
2
25
我需要的输出是这样的:
ID
Max_Recurrency
Priority
abc
2
450
abc
2
12
def
1
827
ghi
2
544
ghi
2
95
换句话说,我需要 select 记录 ID 的次数与 Max_Recurrency 字段中指示的一样多,并且 select 具有最高优先级的记录,即如果 Max_Recurrency 字段的值小于 ID 在 table.
中重复的次数,则排除优先级最低的那些
谁能帮帮我?
我们可以在这里使用ROW_NUMBER
:
WITH cte AS (
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Priority DESC) rn
FROM yourTable t
)
SELECT ID, Max_Recurrency, Priority
FROM cte
WHERE rn <= Max_Recurrency;
我不是 ANSI 专家SQL,我需要编写以下查询。
这是我开始的table:
ID | Max_Recurrency | Priority |
---|---|---|
abc | 2 | 1 |
abc | 2 | 450 |
abc | 2 | 12 |
def | 1 | 827 |
def | 1 | 44 |
def | 1 | 112 |
ghi | 2 | 544 |
ghi | 2 | 4 |
ghi | 2 | 95 |
ghi | 2 | 25 |
我需要的输出是这样的:
ID | Max_Recurrency | Priority |
---|---|---|
abc | 2 | 450 |
abc | 2 | 12 |
def | 1 | 827 |
ghi | 2 | 544 |
ghi | 2 | 95 |
换句话说,我需要 select 记录 ID 的次数与 Max_Recurrency 字段中指示的一样多,并且 select 具有最高优先级的记录,即如果 Max_Recurrency 字段的值小于 ID 在 table.
中重复的次数,则排除优先级最低的那些谁能帮帮我?
我们可以在这里使用ROW_NUMBER
:
WITH cte AS (
SELECT t.*, ROW_NUMBER() OVER (PARTITION BY ID ORDER BY Priority DESC) rn
FROM yourTable t
)
SELECT ID, Max_Recurrency, Priority
FROM cte
WHERE rn <= Max_Recurrency;