2013-05-07 3 views
1
SELECT b.*, 
     a.jeopCodeId, 
     a.JeopCodeDetail 
FROM storm_jeopinfo  a, 
     storm_orders  b 
WHERE a.ordernumber IS NOT NULL 
     AND a.ordernumber = b.order_number 
     AND b.Installed_dt IS NOT NULL 
     AND b.CUST_SIGN_DT BETWEEN CONVERT(date, '2012-06-01', 102) 
           AND CONVERT(date, '2013-04-30', 102) 
    UNION ALL 
SELECT b.*, 
     a.jeop_code, 
     a.jeop_desc 
FROM storm_bpm_jeops  a, 
     storm_orders  b 
WHERE b.order_number = a.Order_number 
     AND b.srvc_order_unit = a.srvc_order_unit 

Сообщ Ошибка: Конверсия удалось при преобразовании значения VarChar 'JEOP-008' для типа данных Int.Ошибка преобразования VARCHAR к Int

Продолжение этой серии со следующими колонками. Не удается выполнить этот запрос.

+1

В первом выборе вы выбираете 'a.jeopCodeId', а во втором -' a.jeop_code'. Являются ли они одним и тем же типом данных? – jalynn2

+0

Это очень плохой метод программирования для использования неявных объединений. Пожалуйста, прочитайте http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/ref=sr_1_1?s=books&ie=UTF8&qid=1367959865&sr=1-1&keywords=sql+antipatterns, чтобы узнать об этом и другие антипаттеры SQL. – HLGEM

ответ

1

На основе вашего обновления вы можете

CAST (SUBSTRING (a.jeop_code, 6,3), как межд), как jeopCodeId

или вы можете объединения, как показано ниже.

Однако я не могу быть уверен, если вы не сообщите нам, что вы хотите сделать, и правила бизнеса в таблице.

SELECT b.*, 
       a.jeopCodeId, 
       a.JeopCodeDetail, 
     a2.jeop_code, 
     a2.jeop_desc 
FROM   storm_orders       b 
     join storm_jeepinfo a on a.ordernumber = b.order_number 
     join storm_bpm_jeops a2 on a2.order_number = b.order_number 
        and a2.srvc_order_unit = b.srvc_order_unit 
WHERE  a.ordernumber IS NOT NULL -- is b.ordernumber ever null if no then this can go. 
       AND b.Installed_dt IS NOT NULL 
       AND b.CUST_SIGN_DT BETWEEN CONVERT(date, '2012-06-01', 102)  
                              AND CONVERT(date, '2013-04-30', 102) 

Вопрос: почему storm_jeepinfo.ordernumber нет _? Наверное, лучше, если бы вы были последовательны в своем наименовании. Это самая яркая ошибка новичка.

Плохое именование никому не выгодно!


Похоже, у вас есть опечатки. Помните, что в UNION ALL поля выбора должны точно совпадать ... так, например, в первом выборе вы выбираете a.jeopCodeId, а во втором вы оставляете id и выбираете a.jeop_code - они явно несовместимы с типами данных.

Я замечаю, что A не относится к одной и той же таблице в обоих операторах выбора. Возможно, что некоторые из полей не имеют совместимых типов. В этом случае вы можете выбрать пустые строки '' или 0 или даже null для полей, которые у вас нет, которые вы пытаетесь объединить.

+0

* В этом случае вы можете выбрать пустые строки '' или 0 или даже null для полей, которые у вас нет, которые вы пытаетесь объединить. * Вы всегда можете отнести к varchar –

+0

@ConradFrix - Конечно, но я не знаю, t думаю, что помогает, если у вас нет правильных данных. Простое внесение вещей не изменяет бизнес-правил, которые их создали. – Hogan

+0

Ну, когда вы заменяете нули, нули или пустые строки, чтобы соответствовать типу данных, я думаю, что вы проиграли битву. –

0
SELECT b.*, 
     cast (a.jeopCodeId as varchar (50)), 
     a.JeopCodeDetail 
FROM storm_jeopinfo  a 
JOIN  storm_orders  b 
    ON a.ordernumber = b.order_number 
WHERE a.ordernumber IS NOT NULL 
     AND b.Installed_dt IS NOT NULL 
     AND b.CUST_SIGN_DT BETWEEN CONVERT(date, '2012-06-01', 102) 
           AND CONVERT(date, '2013-04-30', 102) 
UNION ALL 
SELECT b.*, 
     a.jeop_code, 
     a.jeop_desc 
FROM storm_bpm_jeops  a 
JOIN  storm_orders  b 
    ON b.order_number = a.Order_number 
     AND b.srvc_order_unit = a.srvc_order_unit 

Обратите внимание, что я установил неявные присоединяется к которой не следует использовать, так как они были заменены лучше синтаксиса (проще в обслуживании и менее вероятно, чтобы иметь случайный крест соединяющую) много лет назад. Кроме того, Select * является крайне плохой техникой и должен быть заменен списком полей. Это особенно актуально, если у вас есть союз, так как это будет разорвано, если одна таблица изменится, но не другая. Кроме того, расточительство ресурсов сети и базы данных вызывает больше столбцов, чем вы собираетесь использовать.

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