Как выполнить подзапрос в этом случае? - PullRequest
0 голосов
/ 19 ноября 2018

Итак, давайте рассмотрим мою таблицу как:

col1 data1 col2 data2
0     apple   1   frog
1     orange  0   dino
1     pine    0   dog
0     guava   0   cat

Мой результат запроса должен состоять из data1 и data2 таким образом, что col1=1, тогда он показывает это значение data1,и то же самое с col2=1, затем показывает data2.

Идеальный результат:

data1 data2
orange frog
pine   NULL

Это вообще возможно?

1 Ответ

0 голосов
/ 21 ноября 2018

Все возможно :) Этот sql даст вам желаемый результат:

WITH t1 as 
(select rowid,col1,data1,
(select count(*) from thetable temp1 
  where temp1.col1 = tt.col1 and temp1.rowid < tt.rowid) seq1
from thetable tt
),
t2 as (select col2,data2,
(select count(*) from thetable temp2 
  where temp2.col2 = tt.col2 and temp2.rowid < tt.rowid) seq2
from thetable tt
)

select data1, data2
from t1
LEFT join t2 on col1 = col2 and seq1 = seq2
where col1 = 1
order by col1

Мысль:

  • Разделите данные col1 и данные col2 на отдельныетаблицы (t1, t2)
  • Назначить порядковый номер (seq1, seq2) для каждой строки.(С помощью переходит к @ meherzad для подзапроса).
  • Затем используйте левое соединение, чтобы назначить col2 для col1, пока не закончится.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...