2015-06-09 2 views
2

Представьте себе:SQL - Выберите несколько полей из нескольких таблиц

table1

ID Type Priority 
1212 A CRITICAL 
1213 B MAJOR 
1214 B MINOR 
1215 A MAJOR 
1216 A CRITICAL 
1217 A CRITICAL 

table2

ID   STATE  CHANGEDATE 
1212  Pending  03-06-2015 17:47 
1212  Closed  04-06-2015 05:47 
1212  InProgress 03-06-2015 15:32 
1212  Start  03-06-2015 15:07 
1212  Opened  03-06-2015 13:47 
  • table1 содержит всю информацию, идентификатор в
  • table2 содержит все индивидуальные идентификаторы информация

Что мне нужно: мне нужно получить всю информацию ID из обеих таблиц.

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

Я визуализируется:

ID Type Priority Opened    Closed 
1212 A CRITICAL 03-06-2015 13:47 - 
1215 A MAJOR  06-06-2015 18:00 07-06-2015 18:00 
1216 A CRITICAL 03-05-2015 13:10 04-06-2015 18:00 
1217 A CRITICAL 01-06-2015 11:03 05-06-2015 18:00 

UPDATE:

Это то, что я пытался, но с упором на одном конкретном ID (1212):

SELECT 
    MAX (ID_A) AS "ID", 
    MAX (STATE_A) AS "ACTION NAME", 
    MAX (CHANGEDATE_A) AS "START", 
    MAX (STATE_B) AS "ACTION NAME", 
    MAX (CHANGEDATE_B) AS "END" 
FROM (
SELECT 
    ID AS ID_A, 
    STATE AS STATE_A, 
    CHANGEDATE AS CHANGEDATE_A, 
    NULL AS ID_B, 
    NULL AS STATE_B, 
    NULL AS CHANGEDATE_B 
FROM table2 
WHERE table2.ID = '1212' AND table2.STATE = 'Start' 
UNION ALL 
SELECT 
    NULL AS ID_A, 
    NULL AS STATE_A, 
    NULL AS CHANGEDATE_A, 
    ID AS ID_B, 
    STATE AS STATE_B, 
    CHANGEDATE AS CHANGEDATE_B 
FROM table2 
WHERE table2.ID = '1212' AND table2.STATE = 'Close'); 

Запуск этого I» получим следующий результат:

ID ACTION NAME START   ACTION NAME END 
1212 Start 03-06-2015 13:47 Close  - 

То, что мне нужно, это то же самое, но на этот раз для всех идентификаторов, генерируя список (без указания идентификатора).

+0

Добро пожаловать в stackoverflow. Пожалуйста, прочитайте [ask]. Подсказка №1: Покажите нам, что вы уже пробовали. Подсказка №2: вам нужно дважды присоединиться к таблице2 к таблице 1. –

+0

Даты и время привязаны к определенному типу/типу данных в SQL. Это не так. Исправьте это, затем вернитесь к нам. – Strawberry

+0

Формат даты, представленный мной, является простым примером (именно так я настроил его в SQL Developer для лучшего чтения). –

ответ

0
select t1.ID, 
     t1.Type, 
     t1.Priority, 
     max(case when t2.State = 'Opened' then ChangeDate end) as Opened,  
     max(case when t2.State = 'Closed' then ChangeDate end) as Closed 
from table1 t1 join table2 t2 on t1.id = t2.id 
group by t1.ID, 
     t1.Type, 
     t1.Priority 
0

Вам необходимо использовать JOIN в SQL. Это позволяет вам сопоставить такую ​​информацию.

Базовый синтаксис ниже.

Вы ссылаетесь на OPENED и CLOSED в своем идеальном решении, но поскольку это не относится ни к одной из ваших базовых таблиц, я не уверен, как вычислить это.

select t1.ID, 
     t1.Type,  
     t1.Priority, 
     t2.CHANGEDATE 
FROM table1 t1 
INNER JOIN table2 t2 ON t1.id = t2.REQUESTID 
+0

Привет, ОТКРЫТЫ и ЗАКРЫТЫ поля в таблице2, и мне нужны метки времени из этих полей. –

Смежные вопросы