SQL Combine 2 Выберите операторы, чтобы получить данные из обеих строк - PullRequest
0 голосов
/ 11 июля 2019

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

eg 1st row 
Id, New ID, RecordType, Customer Name, Customer Address, Created,   Closed,   location 
1 , Null,   Initial,     John Smith,    1, long lane,   01/05/2019, 10/05/2019, Office
2nd row
Id, New ID, RecordType,  Customer Name, Customer Address, Created, Closed,    Location
2 , 1,     Completed,     John Smith,    1, long lane,   01/05/2019, 10/05/2019, Field

Я хочу сообщить о 1-й строке, но я хочу, чтобы местоположение из второй строки, вторая строка связывалась с 1-й строкой через идентификатор, и поле New ID.

Я пытался использовать запрос CTE, но возвращаемые результаты меньше, чем результаты, полученные при запросе 1-й строки.

WITH group1 AS (select * from a where closed is not null),
group2 AS (select location from a where closed is not null)
SELECT *
  FROM group1
  JOIN group2 ON group1.ID = group2.NewID ;

Надеюсь, это имеет смысл, просто хочу получить совет о том, как присоединиться к этим2 ряда

Ответы [ 4 ]

0 голосов
/ 11 июля 2019

Правильная логика без CTE:

select t1.*, t2.location
from a t1 left join
     a t2
     on t2.NewID = t1.ID and
        t2.closed is not null
where t1.closed is not null
0 голосов
/ 11 июля 2019

Вы можете использовать это, может помочь.

select s1.*, s2.location as newlocation
 FROM tablename as s1
inner join 
 tablename as s2
 on
s1.Id=s2.new_id

Вы можете объединить таблицу с самим собой

0 голосов
/ 11 июля 2019

Вам нужно левое самостоятельное соединение таблицы:

select  
  a1.id, a2.newid, a2.recordtype,
  a1.customername, a1.customeraddress,
  a1.created, a1.closed, a2.location
from a a1 left join a a2
on a2.newid = a1.id 
where a1.newid is null
0 голосов
/ 11 июля 2019

кажется, вам нужно присоединиться

WITH group1 AS (select * from a where closed is not null),
group2 AS (select location from a where closed is not null)
SELECT group1.*,group2.location
  FROM group1
  left JOIN group2 ON group1.ID = group2.NewID

даже если вы не нуждаетесь в cte, вы можете использовать selft join

select t1.*,t2.location
from a t1 left join a t2 on t1.ID = t2.NewID
where t1.closed is not null
...