Преобразовать char var в целое число для использования в соединении - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь получить отчет для запуска через кристалл, используя нашу базу данных postgres.

Мой SQL выглядит как

SELECT 
    slcnote.note_date, 
    slcnote.account, 
    customer.name, 
    slcnote.reference,
    slcnote.operator,
    salesman.name,  
    slcnote.system_date,
    slcnote.note_type, 
    slcnote.note_note,
                CAST(salesman.code as integer)
FROM   
   slcnote
    Left JOIN customer ON slcnote.account=customer.account
    left JOIN salesman ON slcnote.operator=salesman.code
 ORDER BY "slcnote"."note_date"

Однако, похоже, он не преобразует код продавца вцелое числоВ Crystal Reports появляется следующее сообщение об ошибке:

--------------------------- Crystal Reports --------------------------- 
Failed to retrieve data from the database. 
Details: 42883:
ERROR: operator does not exist: integer = character varying; 
Error while executing the query 
[Database Vendor Code: 7 ] 
--------------------------- OK ---------------------------

Спасибо за помощь

Крис

1 Ответ

1 голос
/ 30 мая 2019

Ваша проблема в том, что вы приводите salesman.code к целому числу в предложении SELECT, но не в предложении ON.Поэтому запрос пытается объединить таблицы путем сравнения integer с VARCHAR, который генерирует сообщение об ошибке.

Чтобы решить вашу непосредственную проблему, вам необходимо выполнить приведение в свой ONпредложение:

SELECT * 
FROM slcnote
    LEFT JOIN salesman ON CAST(salesman.code AS INT) = slcnote."operator"

Как отмечается в комментариях, производительность этого запроса будет ужасной.Если вы не можете изменить таблицу, можете ли вы создать материализованное представление, которое выполняет приведение?Это может помочь.Вы также должны посмотреть, сможет ли это сделать тот, кто может изменить таблицу, сославшись на эти проблемы с производительностью.

...