【问题标题】:SELECT DISTINCT values and INSERT INTO tableSELECT DISTINCT 值和 INSERT INTO 表
【发布时间】:2013-10-01 14:12:21
【问题描述】:

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

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 的价值。 (请注意,我得到哪一行并不重要,因为无论我选择什么 A,对于给定的 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 值,但我的问题是如何做到这一点?

感谢您的宝贵时间。

【问题讨论】:

  • 32264 部分中间有一个错误的32263。

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


【解决方案1】:

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

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

【讨论】:

  • 酷。睁开眼睛从填充表导入到代码表:INSERT INTO code_mst (code_value,code_field) SELECT DISTINCT app_brand,'app_brand' FROM app_mst
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    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
    

    【讨论】:

    • 这会添加许多重复项,OP 只希望每个分组有 1 行。
    • @GoatCO 更新了我的查询以进行过滤。 A group by 大部分时间都可以工作,直到您只想按 A 进行分组。只是想引入窗口功能,因为它们非常有用。
    【解决方案4】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2017-11-25
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      相关资源
      最近更新 更多