Как я могу разбить таблицу SQL на несколько столбцов на основе столбцов с одинаковыми элементами? - PullRequest
0 голосов
/ 25 июня 2019

На данный момент у меня есть одна большая таблица SQL. Допустим, это выглядит так:

Table: allData
County Census Tract Population Name
001    xxxxxx       4328       County1
001    yyyyyy       4729       County1
002    zzzzzz       5629       County2
003    aaaaaa       3947       County3

То, что я хочу, - это отдельная таблица для каждого округа. Так что я бы имел:

Table: County1
County Census Tract Population Name
001    xxxxxx       4328       County1
001    yyyyyy       4729       County1

Table: County2
County Census Tract Population Name
002    zzzzzz       5629       County2

Table: County3
County Census Tract Population Name
003    aaaaaa       3947       County3

Спасибо.

1 Ответ

1 голос
/ 25 июня 2019

Если для вашего варианта использования требуется отдельная таблица для каждого округа, вы можете использовать следующий SQL для генерации create table операторов

select 'create table '+Name+' as select * from allData where name = '''+Name+''';'
  from allData
 group by name

Этот SQL будет генерировать insert операторов

select 'insert into '+Name+' select * from allData where name = '''+Name+''';'
  from allData
 group by name

Вы можете запустить каждое из этих действий и скопировать результат в свой клиент SQL, чтобы создать и заполнить таблицы

Если вам нужно указать имена схем, добавьте их прямо перед Name, например

select 'create table <schema.>'+Name+' as select * from allData where name = '''+Name+''';'

Я использовал следующий SQL для проверки того же

with allData as (    
select '001' County,    'xxxxxx' Census_Tract,       4328 Population,      'County1' Name union all
select '001',    'yyyyyy',       4729,       'County1' union all
select '002',    'zzzzzz',       5629,       'County2' union all
select '003',    'aaaaaa',       3947,       'County3' )
select 'create table '+Name+' as select * from allData where name = '''+Name+''';'
group by name;

with allData as (    
select '001' County,    'xxxxxx' Census_Tract,       4328 Population,      'County1' Name union all
select '001',    'yyyyyy',       4729,       'County1' union all
select '002',    'zzzzzz',       5629,       'County2' union all
select '003',    'aaaaaa',       3947,       'County3' )
select 'insert into '+Name+' select * from allData where name = '''+Name+''';'
from allData
group by name;
...