2013-06-12 78 views
2
SELECT ITEMGROUPID , 
     ITEMID , 
     ITEMNAME , 
     ITEMTYPE , 
     COSTGROUPID , 
     SALESMODEL , 
     DIMENSION , 
     (SELECT DESCRIPTION 
      FROM  DIMENSIONS 
      WHERE  (NUM = 0) 
        AND (DIMENSIONCODE = IT1.DIMENSION) 
     ) AS Expr1 
FROM INVENTTABLE AS IT1 
WHERE (DATAAREAID = 'm02') 
     AND (ITEMGROUPID = 'FG') 
     AND (ITEMID = '14901C') 

此查詢會引發錯誤。結果應該是取自列IT1.DIMENSION的值(int),並搜索Dimension表並從DIMENSIONS表中的說明列中返回值(nvarchar)。從nvarchar到int的SQL轉換失敗錯誤

在執行時它具有如下錯誤:

Conversion Fail. When converting NVARCHAR value 'AG' to datatype INT.

這裏的目的是消除使用一個左外的上面的兩個表INVENTTABLEDIMENSIONS之間加入。

+0

Soooo,你想避免'LEFT JOIN',但你想要一個相關的子查詢呢?另一方面,什麼樣的數據類型是'DIMENSIONCODE'? – Lamak

+0

值'AG'是否來自ITEMGROUPID列? –

+0

*** SQL ***只是*結構化查詢語言* - 許多數據庫系統使用的語言,但不是數據庫產品......很多東西都是特定於供應商的 - 所以我們真的需要知道什麼**數據庫系統**(以及您正在使用的版本)(請相應地更新標籤)。 –

回答

0

在SQL Server中,你會被

...DIMENSIONCODE = Convert(int, IT1.DIMENSION)...

然而,使大方推定的IT1.Dimension列的內容實際上是數字做到這一點。如果,在某些情況下,它不包含的東西,可以被轉換成整數,那麼你會在哪裏,你都迫使一個「1」到如果IT1表達式的結果記錄爲

...DIMENSIONCODE = Convert(int, iif(isnumeric(IT1.DIMENSION) = 1, IT1.DIMENSION, "1"))...

。 DIMENSION不是有效的數字。由於您沒有具體說明您正在使用哪個數據庫,因此可能需要使用一些變體。

+0

謝謝你最及時的迴應。轉換將按照您設想的方式工作。不過,我找到了一個解決方案。問題不在於轉換,而在於我的邏輯(人爲錯誤)。在我的語法中,我將「DIMENSIONCODE與DIMENSION」進行比較,並且由於DIMENSION應與NUM配對,所以這不起作用。 代碼應該是 WHERE(DIMENSIONCODE = 0)AND(NUM = IT1.DIMENSION) 但是,無論如何謝謝你的迴應。 因爲它涉及到數據庫的細節。它是一個Microsoft AX2009數據庫。 – user2479728

相關問題