SELECT DISTINCT值和INSERT INTO表

时间:2013-09-25 20:01:49

标签: sql select sql-server-2012 distinct sql-insert

我想要一个具有重复多次值的列,并且只获取该值一次并将其存储起来供以后使用,但同时我希望在与该不同列相同的行中获得另一个值。 / p>

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的价值。 (注意,无论我选择哪一行都没关系,因为无论我选择什么,B的值对于给定的A都是相同的。)我们现在忽略了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 个答案:

答案 0 :(得分:10)

您可以对此使用INSERT INTO... SELECT语句,

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

答案 1 :(得分:0)

如果我理解你想要正确完成的事情,你应该能够做到这一点:

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

这应该为AB的每个不同组合插入一行,并增加C

答案 2 :(得分: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

答案 3 :(得分:0)

试试这个:

SELECT * INTO new_table FROM
   (SELECT DISTINICT * FROM table_name) x