У меня есть 2 таблицы (люди, данные). В таблице данных мне нужно искать 1 поле для разных результатов.SQL найти разные данные из 1 поля в 1 таблице и соединить 2 таблицы
- Основная группа (из таблицы данных (мы будем называть эту группу a)) будут людьми, у которых есть код C10 *, найденный из поля кода.
- Затем мне нужно посмотреть, сколько из них (имеющих C10 *) также имеют 9Nu0 ИЛИ 9Nu1
- Эти данные также находятся в поле кода в той же таблице данных (поэтому мы будем называть эту группу b), но в другом ряду. Если они имеют 9Nu0 OR 9Nu1, верните только последний. Некоторые могут также иметь значение null.
- Связь между людьми и таблицами данных является ENTITY_ID = master_id
- Наконец показать DOB из таблицы людей для получения конечной таблицы или результатов, показывая master_id, p.dob, a.eventdate, a.read_code, b.eventdate, b.read_code (как показано ниже).
Примечание: Я использую Excel VBA, но писать этот код в SQL, как я извлечение данных из базы данных PostgreSQL с помощью OLEDB
Вот раскладка людей таблицы:
entity_id | dob
1 | 23/09/1951
3 | 08/11/1950
30 | 17/08/1959
61 | 03/06/1957
69 | 08/03/1941
72 | 03/03/1973
105 | 28/11/1925
108 | 08/10/1934
153 | 06/08/1939
168 | 11/03/1953
Здесь является расположение таблицы данных
master_id | eventdate | code
1 | 11/11/2011 | 9Nu1.00
1 | 09/03/2016 | C10E700
3 | 16/11/1999 | 9Nu0.00
3 | 01/01/2008 | C10..00
30 | 27/11/2009 | C10F.00
61 | 18/02/2008 | 9Nu0.00
61 | 19/12/1997 | C10..00
69 | 01/05/1996 | 9Nu1.00
69 | 21/10/2004 | C10F.00
69 | 01/05/1995 | 9Nu0.00
72 | 09/03/2016 | 9Nu0.00
72 | 11/11/2011 | C10F.00
105 | 16/11/1999 | C10..00
108 | 18/10/2005 | C10F.00
153 | 19/12/1997 | 9Nu1.00
153 | 18/02/2008 | C10F.00
168 | 21/10/2004 | 9Nu0.00
168 | 01/05/1995 | C10F.00
и мне нужен результат, чтобы выглядеть следующим образом:
master_id | dob | a.eventdate | a.code | b.eventdate | b.code
1 | 23/09/1951 | 09/03/2016 | C10E700 | 11/11/2011 | 9Nu1.00
3 | 08/11/1950 | 01/01/2008 | C10..00 | 16/11/1999 | 9Nu0.00
30 | 17/08/1959 | 27/11/2009 | C10F.00 | 18/10/2005 |
61 | 03/06/1957 | 19/12/1997 | C10..00 | 18/02/2008 | 9Nu0.00
69 | 08/03/1941 | 21/10/2004 | C10F.00 | 01/05/1995 | 9Nu1.00
72 | 03/03/1973 | 11/11/2011 | C10F.00 | 09/03/2016 | 9Nu0.00
105 | 28/11/1925 | 16/11/1999 | C10..00 | 01/01/2008 |
108 | 08/10/1934 | 18/10/2005 | C10F.00 | 27/11/2009 |
153 | 06/08/1939 | 18/02/2008 | C10F.00 | 19/12/1997 | 9Nu1.00
168 | 11/03/1953 | 01/05/1995 | C10F.00 | 21/10/2004 | 9Nu0.00
Вот мой провал код
Sub GetData()
Const sqlconnection = "Provider=oledb;"
Dim conn As New Connection
conn.ConnectionString = sqlconnection
conn.Open
Dim rs As Recordset
Sheets("Sheet1").Select
Cells.Select
Selection.ClearContents
Range("A1").Select
Dim Q7 As String
Q7 = "SELECT a.master_id, p.dob, a.eventdate, a.code, b.eventdate, b.code " _
& "FROM data a WHERE a.code LIKE 'C10%' " _
& "JOIN people p ON p.entity_id=a.master_id " _
& "FROM data b WHERE (b.code LIKE '9Nu0%' OR b.code LIKE '9Nu1%') " _
& "JOIN people p ON p.entity_id=b.master_id " _
& "ORDER BY a.master_id, a.eventdate DESC "
Set rs = conn.Execute(Q7)
With ActiveSheet.QueryTables.Add(Connection:=rs, Destination:=Range("A1"))
.Refresh
End With
rs.Close
End Sub
Пожалуйста, явно предоставить ошибку, что вы испытываете. С быстрым взглядом ваши параметры sqlconnection выглядят неполными. Кажется, не указывает на конкретный сетевой ресурс вашего PostGreSQL db. – nbayly
Соединение sql отлично работает для всего другого кодирования. Ошибка в этом конкретном разделе - это неожиданное объединение символов. Поскольку я не знаю, как это сделать. – BradleyS
Не знаете, где вы получаете b.evendate, когда b.code является NULL в ваших результатах выборки – mo2