2017-11-18 4 views
0

バックグラウンドの場合:これは本番環境での 'E'テーブルの追加なしで正常に動作します。私は、以下のクエリを実行しようとしていますが、エラーになっていますVarcharから数値へのエラー

Msg 8114, Level 16, State 5, Line 10
Error converting data type varchar to numeric.

奇妙なことは、それが我々のテストDB上の罰金を実行ということですが - 数値ので、少し困惑に変換しようとしているものを見ていません。テストDBとプロダクションDBでデータ型が同じであると仮定すると、その違いを引き起こす原因はわかりません。

ありがとうございました。

/* - adding po balance qty causes duplicates 
    - adding stock category causes duplicates 
    - added PO comments using MAX function to return only first comment - gets rid of duplicates*/ 

/* Using NEW employee table as of 11/2 */ 
SELECT 
    S.team_member_name AS [ASSIGNED EMPLOYEE], --Using new employee table - only on bus unit as of 11/2 
    H.po_type AS [ PO TYPE], 
    G.order_no AS [GPS PO #], 
    P.po_number AS [SAP PO NUMBER], 
    M.department AS [DEPARTMENT], 
    G.order_qty AS [GPS QTY], 
    SUM(P.po_ordered_quantity) AS [SAP QUANTITY], 
    (SUM(P.po_ordered_quantity) - G.order_qty) AS [DIFFERENCE], 
    G.last_conf_date_cst AS [LAST CONFIRMED DATE], 
    K.business_unit_desc AS [BU], 
    M.[description] AS [DESCRIPTION], 
    P.material AS [MATERIAL], 
    MAX(P.comment) AS [PO COMMENT], 
    MIN(E.date) AS [FIRST SHOWN ON RPT] 
FROM 
    (SELECT 
     order_no, order_qty, order_status, 
     last_conf_date_cst 
    FROM 
     asagdwpdx_prod.dbo.SimoxOrder1 
    UNION ALL 
    SELECT 
     order_no, order_qty, order_status, 
     last_conf_date_cst 
    FROM 
     asagdwpdx_prod.dbo.SimoxOrder2 
    UNION ALL 
    SELECT 
     order_no, order_qty, order_status, 
     last_conf_date_cst 
    FROM 
     asagdwpdx_prod.dbo.SimoxOrder3) G 

JOIN 
    pdx_sap_user.dbo.vw_po_header H ON G.order_no = h.ahag_number 
JOIN 
    pdx_sap_user.dbo.vw_po_item P ON H.po_number = P.po_number 
JOIN 
    pdx_sap_user.dbo.vw_mm_material M ON P.material = M.material 
JOIN 
    adi_user_maintained.dbo.SCM_PO_Employee_Name S ON P.po_number = S.po_number 
JOIN 
    pdx_sap_user.dbo.vw_kd_business_unit K ON M.business_unit_code = K.business_unit_code 
JOIN 
    adi_user_maintained.dbo.scm_po_error_tracking E ON E.po_number = P.po_number 
WHERE  
    M.business_segment_code NOT IN ('421', '420', '422', '424') --exclude adi golf 
    AND E.report_source = 'gpsvssap_qty' 
GROUP BY 
    G.order_no, -- GROUP BY needed on aggregate function in SELECT 
    G.order_qty, 
    G.order_status, 
    P.po_number, 
    P.material, 
    P.del_indicator, 
    H.po_created_by, 
    M.[description], 
    M.department, 
    S.team_member_name, 
    K.business_unit_desc, 
    G.last_conf_date_cst, 
    H.po_type 
HAVING 
    G.order_qty <> SUM(P.po_ordered_quantity) 
    AND G.order_status NOT IN ('60', '90') -- excluding GPS cancelled (90) & shipped (60) - do we need to exclude other status'? 
    AND P.del_indicator <> 'L' 
+0

変換は、ユニオンの間のデータ型が一致しない(または、おそらく結合条件になる)ために発生します。このエラーは、値を暗黙的に変換できないために発生します。この値はテストデータベースには存在しません。テストデータベースでも変換は行われますが、常に成功します。 – HoneyBadger

+0

これは正しいです - フィールドのPO番号は2つのテーブルで異なります!ありがとう! – user3496218

答えて

2

「MAX(P.comment)」をご覧ください。最大文字列を見つけることができません。あなたのコメントが数値でない限り、

+0

最大のコメントではありません - それを削除するときにはまだ動作しません – user3496218

+0

"E"テーブル - 最後の結合とその関連フィールドを結合した後にエラーが発生します – user3496218

+0

@ user3496218これらの数値の1つはnvarcharです – Sami

関連する問題