2013-01-28 3 views
-1

У меня есть следующий запрос сервера SQL sql, который я хотел бы запустить на MYSQL DAtabase.MSSQL SYNTAX необходимо преобразовать в MYSQL

получаю ошибку ниже на базе данных MySQL:

[Err] 1064 - У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «[Инцидент Num], tt.name как [Тип билета], freetext2 как [Severity], tp.name как [Pri» в строке 1

сервер запросов Microsoft Sql я использую:

SELECT t.tn AS [Incident Num], 
     tt.name as [Ticket Type], 
     freetext2 as [Severity], 
     tp.name as [Priority] ts.name as [Status], 
     title as [Description], 
     create_time as [Created Timestamp], 
     CASE WHEN th.state_id=15 THEN 
     (select min(th.create_time) FROM ticket_history GROUP BY th.ticket_id, 
      th.state_id having th.state_id=15 ) else create_time as [Assigned to Accenture Timestamp], 
     (select min(create_time) FROM ticket_history group by ticket_id,state_id having state_id=4) as [In Progress Timestamp], 
     (select min(create_time) FROM ticket_history group by ticket_id,state_id having state_id=3)as [Restored timestamp], 
     (select max(create_time) FROM ticket_history group by ticket_id,state_id having state_id=2)as [Closed Timestamp], 
     (select DATEDIFF(mi,max(create_time,min(create_time) FROM ticket_history group by ticket_id,state_id having state_id=12) as [Total Time spent by the ticket in 'Pending at user'status], 
     cu.email as [Customer Name], 
     customer_user.email AS Assignee 
FROM ticket t 
JOIN ticket_type tt ON t.type_id=tt.id 
JOIN ticket_Priority tp ON t.ticket_priority_id=tp.id 
JOIN ticket_state ts ON t.ticket_state_id=ts.id 
JOIN ticket_history th ON t.id=th.ticket_id 
JOIN customer_user cu ON t.customer_id=cu.customer_id 
JOIN customer_user ON t.responsible_user_id=customer_user.id 

пожалуйста, помогите мне изменения синтаксиса запросов к MySQL ** ** с вне изменения логики.

+0

Я не думаю, что этот запрос будет работать в MSSQL. Возможно, вы сделали ошибку транскрипции. В любом случае этот запрос является отвратительным на любом языке, поэтому, вероятно, лучше начать все заново. Рассмотрим предоставление DDL и/или sqlfiddleрепрезентативный набор данных и желаемый набор результатов. – Strawberry

+1

Удалите нестандартные идентификаторы с использованием '[..]'. Замените те идентификаторы, которые содержат, например, пространство с именем, которое не нуждается в цитировании. Тогда это должно быть хорошо. –

+0

Вам не хватает запятой ... здесь ... tp.name как [Приоритет] ts.name как [Статус]? – PGallagher

ответ

1

При определении названий пользовательских столбцов, поместить их в кавычки (или обратные кавычки, например:.

t.tn AS '[Incident Num]', // and so on 

ИЛИ

t.tn AS `[Incident Num]`, // and so on 

ошибка происходит из-за того же

+0

Спасибо, что сработал. Но опять та же ошибка: ошибка на линии, где начинается «WHEN». Что-то внутри оператора CASE вызывает ошибку. запрос выполняется, когда я удаляю полный раздел CASE Пожалуйста, помогите мне с написанием оператора case в MYSQL – user1424196

+0

@ user1424196: Возможно, вам следует указать полное сообщение об ошибке. Синтаксис CASE выглядит хорошо для меня, по крайней мере, он должен работать в MySQL. Я сомневаюсь в ваших подзапросах. Они кажутся потенциальными для возвращения более чем одной строки, и это было бы проблемой, если бы они действительно это сделали. –

+0

@ user1424196 Вы использовали то же самое для операторов 'CASE', где у вас есть' as [Assigned to Accenture Timestamp], ' – hjpotter92

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