2017-11-18 42 views
0

Für den Hintergrund: das funktioniert ohne die Zugabe der 'E' Tabelle in der Produktion.Fehler mit Varchar zu numerisch

Ich versuche, die unter Abfrage auszuführen, aber ich erhalte die Fehlermeldung:

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

Das Seltsame ist, dass es auf unserem Test-DB in Ordnung ausführt - nicht etwas zu sehen, um numerische zu konvertieren versuchen, so etwas verwirrt . Nicht wirklich sicher, was diesen Unterschied verursachen würde, da ich davon ausgehe, dass die Datentypen in der Test-DB und der Produktions-DB gleich sind - irgendwelche Ideen?

Danke.

/* - 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

Die Konvertierung tritt auf, weil Datentypen zwischen Unions nicht übereinstimmen (oder vielleicht in einer Join-Bedingung). Der Fehler tritt auf, weil ein Wert nicht implizit konvertiert werden kann. Dieser Wert ist in Ihrer Testdatenbank offenbar nicht vorhanden. In Ihrer Testdatenbank erfolgt die Konvertierung ebenfalls, ist aber immer erfolgreich. – HoneyBadger

+0

das ist richtig - das Feld Bestellnummer ist in den beiden Tabellen unterschiedlich! Vielen Dank! – user3496218

Antwort

2

Vielleicht möchten Sie sich 'MAX (P.com)' anschauen. Sie können Max of string nicht finden. Es sei denn, Ihr Kommentar ist numerisch

+0

nicht der maximale Kommentar - es funktioniert immer noch nicht beim Entfernen – user3496218

+0

der Fehler passiert nur nach dem Beitritt der "E" -Tabelle - der letzte Join und seine verwandten Felder – user3496218

+0

@ user3496218 Also eine dieser Zahlen sind nvarchar – Sami

Verwandte Themen