7

我想获取一个包含多次重复值的列,并且只获取一次该值并将其存储以供以后使用,但同时我想在与该不同列相同的行中获取另一个值。

A      B       C
32263  123456  44
32263  123456  45
32263  123456  46
32264  246802  44
32263  246802  45
32264  246802  46
32265  369258  44
32265  369258  45
32265  369258  46

A、B、C 代表三列。暂时忽略 C。

我的问题是:如何在此表中获取此信息并将其存储以供稍后在脚本中使用?

这是我尝试过的:

use databaseName

select distinct A from tableName
order by A

结果是:

A
32263
32264
32265

我试图让它也给我 B 的价值。(请注意,我得到哪一行并不重要,因为无论 AI 选择什么,对于给定的 A,B 的值都是相同的。)我们现在忽略 C。

结果应该是:

A      B
32263  123456
32264  246802
32265  369258

现在,一旦我得到它,我想使用从查询中获得的值插入一行。这就是 C 的用武之地。我想做这样的事情:

use databaseName

insert into tableName (A, B, C)
values (32263, 123456, 47)

当然,我不想将值直接放在其中,而是使用某种类型的循环循环遍历我找到的 3 个不同的 A 值中的每一个。

简而言之,我的桌子应该来自:

A      B       C
32263  123456  44
32263  123456  45
32263  123456  46
32264  246802  44
32263  246802  45
32264  246802  46
32265  369258  44
32265  369258  45
32265  369258  46

到:

A      B       C
32263  123456  44
32263  123456  45
32263  123456  46
32263  123456  47 -
32264  246802  44
32263  246802  45
32264  246802  46
32264  246802  47 -
32265  369258  44
32265  369258  45
32265  369258  46
32265  369258  47 -

我在新添加的行旁边放置了破折号,以帮助您查看更改。

我想我也许应该做一些循环遍历所有三个不同的 A 值,但我的问题是如何做到这一点?

谢谢你的时间。

4

4 回答 4

14

您可以INSERT INTO... SELECT对此使用声明,

INSERT INTO tableName (A, B, C)
SELECT A, B, MAX(C) + 1
FROM tableName
GROUP BY A, B
于 2013-09-25T20:06:52.513 回答
1

试试这个:

SELECT * INTO new_table FROM
   (SELECT DISTINCT * FROM table_name) x
于 2017-03-04T05:28:52.393 回答
0

如果我理解您要正确完成的工作,您应该能够做到这一点:

INSERT INTO Table
SELECT A, B, MAX(C) + 1
FROM Table
GROUP A, B

A这应该为and 和Bincrement的每个不同组合插入一行C

于 2013-09-25T20:07:36.053 回答
0

这可以使用窗口函数来完成。

INSERT INTO TABLENAME (A, B, C)
SELECT A, B, C + 1
FROM(
select A, B, C, MAX(C) OVER(PARTITION BY A, B) AS MAXC
FROM TABLENAME 
) AS NEW_ROWS
WHERE C = MAXC
于 2013-09-25T20:07:59.963 回答