2014-08-29 2 views
1

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

У меня есть таблица с 4 столбцами, в этих столбцах данные хранятся довольно странно. Моя таблица выглядит следующим образом

entry_id| field_id |  value     | value_ID | 
| 480|  -5 |  string of text| 10 | 
| 480|  -20 |  string of other text | 10  | 
| 480|  -23 |  Yes     | 10  | 
| 480|  -22 |  No     | 10  | 

Я разработал запрос, который превращает поле ID в новый столбец с прилагаемым значением.

Запрос выглядит следующим образом:

SELECT 
ticket.ticket_id, 
ticket.number, 
users.name, 

CASE WHEN val.field_id IN (5) THEN val.value end as "Issue Summary", 
CASE WHEN val.field_id IN (20) THEN val.value end as "Project Site", 
CASE WHEN val.field_id IN (23) THEN val.value end as "Action" 

FROM ost_ticket ticket 

LEFT JOIN ost_form_entry entry ON (ticket.ticket_id = entry.object_id) 
LEFT JOIN ost_form_entry_values val ON (entry.id = val.entry_id) 
LEFT JOIN ost_user users ON (ticket.user_id = users.id) 
LEFT JOIN ost_form_field fields ON (val.field_id = fields.id) 

Этот запрос возвращает: http://i.stack.imgur.com/hqBv0.png (косяк вставлять изображение из-за отсутствия репутации.)

Как вы можете видеть, у меня есть несколько одинаковых билетов ID»и много NULLS. Что запрос я должен использовать, чтобы иметь только одну строку для каждого уникального TICKET_ID

ответ

0

Я предполагаю, что вы хотите, чтобы получить значения полей в одной строке:

SELECT 
ticket.ticket_id, 
ticket.number, 
users.name, 
issue_sum.value as "Issue Summary", 
project_site.value as "Project Site", 
action.value as "Action" 
FROM ost_ticket ticket 
LEFT JOIN ost_form_entry entry ON (ticket.ticket_id = entry.object_id) 
LEFT JOIN ost_form_entry_values issue_sum 
    ON (entry.id = issue_sum.entry_id) and issue_sum.field_id = 5 
LEFT JOIN ost_form_entry_values project_site 
    ON (entry.id = project_site .entry_id) and project_site.field_id = 20 
LEFT JOIN ost_form_entry_values action 
    ON (entry.id = action.entry_id) and action.field_id = 23 
LEFT JOIN ost_user users ON (ticket.user_id = users.id) 
LEFT JOIN ost_form_field fields ON (val.field_id = fields.id) 

Учитывая, что вы можете иметь несколько записей сущностей за билет , единственное, что я могу предложить, это использовать агрегацию:

SELECT 
    ticket.ticket_id, 
    ticket.number, 
    users.name, 
    MAX(issue_sum.value) as "Issue Summary", 
    MAX(project_site.value) as "Project Site", 
    MAX(action.value) as "Action" 
    FROM ost_ticket ticket 
    LEFT JOIN ost_form_entry entry ON (ticket.ticket_id = entry.object_id) 
    LEFT JOIN ost_form_entry_values issue_sum 
     ON (entry.id = issue_sum.entry_id) and issue_sum.field_id = 5 
    LEFT JOIN ost_form_entry_values project_site 
     ON (entry.id = project_site .entry_id) and project_site.field_id = 20 
    LEFT JOIN ost_form_entry_values action 
     ON (entry.id = action.entry_id) and action.field_id = 23 
    LEFT JOIN ost_user users ON (ticket.user_id = users.id) 
    LEFT JOIN ost_form_field fields ON (val.field_id = fields.id) 
GROUP BY 
    ticket.ticket_id, 
    ticket.number, 
    users.name; 
+0

Вместо 3 Теперь у меня есть 2 столбца с этим запросом. Объяснение проблемы все еще отделено от двух других. – howdoiholdallthesequeries

+0

Простите, я имел в виду строки. У меня все еще есть повторяющаяся строка id. – howdoiholdallthesequeries

+0

изображение для справки: http://imgur.com/WNQbbFL – howdoiholdallthesequeries

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