我有一个SQL Table,其中有一些虚拟数据。我想要那个虚拟数据并用column type更新该行
my table tbl
ID D1 M1 C1 QTY TYPE
1 D1 M1 C1 1 Y
2 D1 M2 C1 2 Y
3 D1 M3 C1 3 Y
4 D1 M1 C1 1 Y
5 D2 M1 C1 1 Y
6 D2 M2 C1 2 Y
7 D2 M3 C2 3 Y
8 D2 M1 C1 1 Y
9 D2 M2 C1 2 Y
10 D3 M1 C1 1 Y
11 D3 M2 C1 2 Y
12 D3 M3 C1 3 Y
13 D3 M1 C1 1 Y
14 D3 M2 C1 2 Y
15 D3 M3 C1 3 Y
16 D3 M1 C2 1 Y列D1和M1上的分组
我不知道。至于纪录方面,我现在必须识别3项纪录,如有任何纪录仍然存在,则应以“否”、“否”、“肯定”的形式列出:
条件1:如果我有4张唱片,那就把一组3-3张唱片保留下来,最后1条记录应该设置为“否”。
条件2:如果我有5张唱片,那就制作一组3-3张唱片,这样剩下的2张唱片就会被设定为“否”。
条件3:如果我有7张唱片,那就把一组3-3的唱片保留下来,最后1条记录将被设置为“否”。
我期望的答案如下
ID D1 M1 C1 QTY TYPE
1 D1 M1 C1 1 YES
2 D1 M2 C1 2 YES
3 D1 M3 C1 3 YES
4 D1 M1 C1 1 NO
5 D2 M1 C1 1 YES
6 D2 M2 C1 2 YES
7 D2 M3 C2 3 YES
8 D2 M1 C1 1 NO
9 D2 M2 C1 2 NO
10 D3 M1 C1 1 YES
11 D3 M2 C1 2 YES
12 D3 M3 C1 3 YES
13 D3 M1 C1 1 YES
14 D3 M2 C1 2 YES
15 D3 M3 C1 3 YES
16 D3 M1 C2 1 NOSQLFIDDLE
请告诉我解决办法。
发布于 2014-04-25 10:46:39
这就是你要找的吗?
with toupdate as (
select t.*, row_number() over (partition by d1 order by id) as seqnum,
count(*) over (partition by d1) as cnt
from tbl t
)
update toupdate
set type = (case when seqnum <= 3*(cnt /3) then 'yes' else 'no' end);您还可以运行类似于select的逻辑。
select t.*, (case when seqnum <= 3*(cnt /3) then 'yes' else 'no' end)
from (
select t.*, row_number() over (partition by d1 order by id) as seqnum,
count(*) over (partition by d1) as cnt
from tbl t
) t;https://stackoverflow.com/questions/23290638
复制相似问题