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 时转换失败。

它在接下来的专栏中继续。我无法成功执行此查询。

4

2 回答 2

1

根据您可能需要的更新

CAST(SUBSTRING(a.jeop_code,6,3) as int) as 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 在两个 select 语句中都没有引用同一个表。可能是某些字段没有兼容的类型。在这种情况下,您可以选择空字符串''0甚至可以选择null您没有尝试合并的字段。

于 2013-05-07T18:58:53.917 回答
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 * 是一种极差的技术,应替换为字段列表。当您有一个联合时尤其如此,因为如果一个表更改但另一个表没有更改,这将中断。此外,调用比您打算使用的更多的列是对网络和数据库资源的浪费。

于 2013-05-07T20:59:43.667 回答