我一直试图用IF和CASE WHEN语句来解决我的问题,但我没有得到我需要的结果,我希望你能帮助我。
假设我有这张表:
Client | address
----------------
John | add1
John | add2
Fred | add1
Amy | add1
Amy | add2
Amy | add3
1)如何为每个不同的客户在新列(ID)中设置递增值,以获得此结果:
ID | Client | address
---------------------
1 | John | add1
1 | John | add2
2 | Fred | add1
3 | Amy | add1
3 | Amy | add2
4 | Amy | add3
2)如何为具有不同地址的每个不同客户在新列(站点)中设置递增值,以获得此结果:
ID | Site | Client | address
----------------------------
1 | 1 | John | add1
1 | 2 | John | add2
2 | 1 | Fred | add1
3 | 1 | Amy | add1
3 | 2 | Amy | add2
4 | 3 | Amy | add3
最诚挚的问候, 埃利奥·费尔南德斯
答案 0 :(得分:0)
我认为最好是使用伪索引表进行JOIN
SET @clientId=0;
SELECT idc.clientId, t.*
FROM `table` as t
INNER JOIN (
SELECT address, @clientId:=@clientId+1 AS clientId
FROM `table`
) as idc
ON idc.address = t.address
对于第2部分来说,它是相同的
答案 1 :(得分:0)
您可以使用窗口函数执行此操作:
select dense_rank() over (order by client) as id,
row_number() over (partition by client order by address) as site,
client, address
from t;
这些是ANSI标准函数,可在大多数数据库中使用。