SELECT DISTINCT значения и INSERT INTO таблица

Я хочу взять столбец со значениями, которые повторяются несколько раз, получить это значение только один раз и сохранить его для последующего использования, но в то же время я хотел бы получить другое значение в той же строке, что и этот отдельный столбец.

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 я выберу, значение 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

To:

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, но моя проблема заключается в том, как это сделать?

Спасибо за ваше время.


person JohnAtrik    schedule 25.09.2013    source источник
comment
В середине раздела 32264 есть ошибочный 32263.   -  person Hart CO    schedule 26.09.2013


Ответы (4)


Вы можете использовать оператор INSERT INTO... SELECT для этого,

INSERT INTO tableName (A, B, C)
SELECT A, B, MAX(C) + 1
FROM tableName
GROUP BY A, B
person John Woo    schedule 25.09.2013
comment
Прохладно. У меня открылись глаза на импорт из заполненной таблицы в таблицу кодов: INSERT INTO code_mst (code_value,code_field) SELECT DISTINCT app_brand,'app_brand' FROM app_mst - person cdsaenz; 28.10.2019

Попробуй это:

SELECT * INTO new_table FROM
   (SELECT DISTINICT * FROM table_name) x
person sabihul haque    schedule 04.03.2017

Если я правильно понимаю, чего вы пытаетесь добиться, вы сможете сделать это:

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

Это должно вставить строку для каждой отдельной комбинации A и B, а также увеличить C.

person Khan    schedule 25.09.2013

Это можно сделать с помощью оконных функций.

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
person Vulcronos    schedule 25.09.2013
comment
Это добавит много дубликатов, OP просто хочет 1 строку на группу. - person Hart CO; 26.09.2013
comment
@GoatCO Обновил мой запрос для фильтрации. Группировка по будет работать большую часть времени, пока вы просто не захотите сгруппировать по А. Просто хотел ввести оконную функцию, поскольку они очень полезны. - person Vulcronos; 26.09.2013