Используйте SQL, чтобы свернуть в одну строку, сопоставив идентификаторы, найденные по столбцам - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть SQL-запрос, который выглядит примерно так:

SELECT *
FROM
 ((SELECT * FROM schema.table1) AS a
     FULL OUTER JOIN
  (SELECT * FROM schema.table2) AS b ON a.id1 = b.id2
     FULL OUTER JOIN
  (SELECT * FROM schema.table3) AS c on b.id2 = c.id3
  );

, который возвращает таблицу, которая выглядит следующим образом:

    id1       id2       id3       mean1       mean2        mean3
"apple"      NULL      NULL       100.0        NULL         NULL
   NULL   "apple"   "apple"        NULL       105.4        116.8
   NULL    "pear"      NULL        NULL       441.3         NULL
   NULL     NULL     "pear"        NULL        NULL        444.9

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

    id1       id2       id3       mean1       mean2        mean3
"apple"   "apple"   "apple"       100.0       105.4        116.8
   NULL    "pear"    "pear"        NULL       441.3        444.9

Как бы я изменил SQL-запрос для достижения того, чего я хочу?

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

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы можете просто использовать это:

SELECT *
FROM
 ((SELECT * FROM schema.table1) AS a
     FULL OUTER JOIN
  (SELECT * FROM schema.table2) AS b ON a.id1 = b.id2
     FULL OUTER JOIN
  (SELECT * FROM schema.table3) AS c on b.id2 = c.id3
  )
 group by id1, id2, id3, mean1, mean2, mean3;
0 голосов
/ 19 декабря 2018

Не зная, какие данные находятся в ваших таблицах 1, 2 и 2, я думаю, что это может быть проблема с данными в двойных кавычках, вы можете попробовать скопировать и вставить данные в notepad ++ и увидеть разницув двойных кавычках.

enter image description here

Если данные (двойные кавычки, орфография, пробелы и т. Д.) Все в порядке, то ваш запрос должен дать ожидаемые результаты.Я попробовал это с некоторыми примерами данных и, кажется, работает.

enter image description here

Чтобы уточнить, если в table1 было '' apple '', а не«яблоко» (обратите внимание на разницу в двойных кавычках, вставив данные в блокнот ++) .И в table2 было '' pear '', а не «pear» (обратите внимание на разницу в двойных кавычках, вставив данные в блокнот ++) , тогда результат запроса SAME вернет запросрезультат, как то, что вы получаете.Проверьте скриншот ниже.Я тоже попробовал это с этими данными, и в этом случае ваш запрос не работает должным образом.

enter image description here

...