Я получаю:
Ошибка преобразования при преобразовании символьной строки в уникальный идентификатор.
ошибка, когда я пытаюсь UNION ALL
выполнить два одинаковых запроса, заключенных в подзапросы. Я не уверен, о чем идет речь, поскольку запросы работают нормально по отдельности. Может быть дело в синтаксисе?
SELECT *
FROM (
SELECT
Table1.[Owner]
FROM
(
SELECT
owneridname [Owner],
incidentid [Ticket Number1]
FROM
incident
) as Table1
LEFT JOIN
(
SELECT
MAX(DATEADD(hh,-7,svb_timestamp)) [Time Stamp],
svb_caseid [Ticket Number2]
FROM
svb_caseupdate
GROUP BY svb_caseid
) as Table2
ON Table1.[Ticket Number1] = Table2.[Ticket Number2]
) sq1
UNION ALL
SELECT *
FROM (
SELECT
Table1.[Owner]
FROM
(
SELECT
svb_cssowner [Owner],
incidentid [Ticket Number1]
FROM
incident
) as Table1
LEFT JOIN
(
SELECT
MAX(DATEADD(hh,-7,svb_timestamp)) [Time Stamp],
svb_caseid [Ticket Number2]
FROM
svb_caseupdate
GROUP BY svb_caseid
) as Table2
ON Table1.[Ticket Number1] = Table2.[Ticket Number2]
) sq2
Я ожидал объединить обе таблицы, что должно было быть довольно просто.
Вы уже спрашивали об этом и получили такие же комментарии
Вместо того, чтобы иметь два одинаковых запроса, за исключением выбора другого столбца из incident
, вам лучше использовать что-то вроде SELECT V.[Owner], incidentid [Ticket Number1] FROM incident CROSS APPLY (VALUES(svb_cssowner), ( CAST(owneridname AS VARCHAR(36)))) V([Owner])
, а затем присоединиться к этому
Вы пытаетесь объединить incident.owneridname
и incident.svb_cssowner
. СУБД сообщает вам
Ошибка преобразования при преобразовании символьной строки в уникальный идентификатор.
Таким образом, один из двух столбцов является столбцом уникального идентификатора, а другой — строковым столбцом. СУБД пытается преобразовать строковое значение в значение уникального идентификатора, но это не удается. Вместо этого вам нужно преобразовать столбец uniqueidentifier в строку, чтобы иметь строки, которые вы объединяете.
Наверное, что-то вроде
(
SELECT
CAST(owneridname AS CHAR(36)) AS [Owner],
incidentid [Ticket Number1]
FROM incident
) as Table1
Это решение сработало! Спасибо за объяснение - это имеет большой смысл.
Когда вы используете UNION, поля второго запроса, который мог бы прекрасно работать сам по себе, преобразуются в тот же тип данных, что и соответствующие поля первого запроса, и это не всегда возможно. Попробуйте преобразовать тип первого поля первого запроса в UNION в символьную строку (теперь это, видимо, уникальный идентификатор).