Как объединить Multi Datatable (DataColumn) в один, но отдельный столбец? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть следующие 3 запроса:

sSQLSting1 = "SELECT * From Column1"
sSQLSting2 = "SELECT * From Column2"
sSQLSting3 = "SELECT * From Column3"

enter image description here

Редактировать: Столбец1 - это имя таблицы1, но это просто столбец.

Я хочу объединить их все в разные столбцы нового объекта данных, но при попытке: sSQLSting1 & " Union " & sSQLSting2 & " Union " & sSQLSting3, но список возвращает только столбец.

В результате я хочу создать таблицу, включающую все вышеперечисленные столбцы, поэтому у меня возникает вопрос: могу ли я сделать это только с одним оператором запроса, или мне нужно выполнить итерацию и добавить данные для каждого столбца? (Я использую c#).

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Это, вероятно, проще всего сделать на стороне клиента:

for(int x = 1; x < dts.Length; x++){
  dts[0].Columns.Add(dts[x].Columns[0].ColumnName);

  for(int y = 0; y <  dts[x].Rows.Count; y++)
    dts[0].Rows[y][x] = dts[x].Rows[y][0];

}

Он будет обрабатывать любое количество данных в массиве (называемое dts) - измените Length на Coubt, если это список et c

Все имена столбцов должны быть уникальными (ваши) - можно добавить Logi c, чтобы добавить что-то к имени, чтобы сделать его уникальным

Все данные копируются в первую таблицу в массиве

Если ваши столбцы отличны от строки, вы можете добавить тип нового столбца, добавляемого в dts [0], взяв тип dts [x] .Columns [0]

1 голос
/ 01 мая 2020

Возможно, это поможет немного

Опять же, НЕТ GTD правильной последовательности. Также это предполагает одинаковое количество строк в каждой таблице

Пример

Select Col1 = A.SomeColumn
      ,Col2 = B.SomeColumn
      ,Col3 = C.SomeColumn
 From ( Select SomeColumn,RN=row_number() over (order by SomeColumn ) from Column1 ) A
 Join ( Select SomeColumn,RN=row_number() over (order by SomeColumn ) from Column2 ) B on A.RN=B.RN
 Join ( Select SomeColumn,RN=row_number() over (order by SomeColumn ) from Column3 ) C on A.RN=C.RN

РЕДАКТИРОВАТЬ другой вариант - PIVOT

Select *
 From  (
        Select Value=SomeColumn,Col=1,RN=row_number() over (order by SomeColumn ) from Column1
        Union All
        Select Value=SomeColumn,Col=2,RN=row_number() over (order by SomeColumn ) from Column2
        Union All
        Select Value=SomeColumn,Col=3,RN=row_number() over (order by SomeColumn ) from Column3
       ) src
 Pivot (max(value) for Col in ([1],[2],[3]) ) pvt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...