我有一个包含两列n整数和s varchar的表。 n是主键。 s大多是独一无二的但并不总是如此例如
n s
1 New York
2 Moscow
3 Paris
4 London
5 Moscow
6 Berlin
7 Moscow
我想创建另一个具有相同结构的表,相同的行数除外,通过向第二个和更多的出现添加数字后缀,s将变为唯一。例如:
n s
1 New York
2 Moscow
3 Paris
4 London
5 Moscow 2
6 Berlin
7 Moscow 3
以独立于平台的方式在单个SQL命令中(sqlite是我的数据库)。有什么想法吗?
答案 0 :(得分:5)
SELECT e.ID,e.Name,(SELECT COUNT(*)FROM Table1 as d WHERE d.ID< e.ID AND d.Name = e.Name)FROM Table1 as e;
答案 1 :(得分:0)
为什么不总是将主键值添加到字符串的开头(或结尾)?然后,您始终可以按主键的长度对字符串进行子字符串处理,这样您就可以随时获得所需的字符串。
因此您的数据可能如下所示:
n s
1 1New York
2 2Moscow
3 3Paris
4 4London
5 5Moscow
6 6Berlin
7 7Moscow
.
.
.
100995 100995Paris
答案 2 :(得分:0)
你还没有在这里发布真正的问题,我的猜测是有一个 MUCH 更好的解决方案,然后你想做什么。话虽这么说,下面的代码应该给你你想要的。使用它是你自己的危险。
我最近几乎一直在使用MS SQL,但我认为这主要是ANSI兼容的。例外是RTRIM功能。 ANSI标准中有一个TRIM函数,但在使用RTRIM和LTRIM的Transact-SQL中似乎不支持。
SELECT
n,
RTRIM(s + ' ' + COALESCE
(
(
SELECT
NULLIF(CAST(COUNT(*) AS VARCHAR(10)), 0) AS cnt
FROM
Some_Table T2
WHERE
T2.s = T1.s AND
T2.n < T1.n
), ''
)) AS s
FROM
Some_Table T1
P.S。 - 如果这些是你真正的列名,你的列的命名约定是可怕的。 ;)