2014-10-17 180 views
0

我正在嘗試在兩個不同表中的兩個不同名稱的列上創建一個UNION ALL查詢。查詢比較兩個不同表中兩列的差異

我想採取USER_EXCEL表中的「MTRL」列,並將其與IM_EXCEL表中的「short_material_number」列進行比較。然後,我想查詢只返回兩列之間的區別。兩列都包含材料編號,但在表格中以不同方式命名(列明)。

我至今是:

(SELECT [MTRL] FROM dbo.USER_EXCEL 
EXCEPT 
SELECT [short_material_number] FROM dbo.IM_Excel) 

UNION ALL 

(SELECT [short_material_number] FROM dbo.IM_Excel 
EXCEPT 
SELECT [MTRL] FROM dbo.USER_EXCEL) 

但是,試圖運行該查詢我收到一條錯誤消息時:

消息8114,級別16,狀態5,行22
將數據類型varchar轉換爲float時出錯。

+1

我的猜測是,一個的列包含數字值和其他文本。查詢是隱式嘗試將文本轉換爲數值,其中一個記錄包含無法轉換的文本值。 – Barry 2014-10-17 18:42:30

+0

@巴里是啊,就是這樣。當然。 – 2014-10-17 18:47:31

+1

請添加「MTRL」和「short_material_number」的數據類型 – Ram 2014-10-17 18:50:53

回答

0

你幾乎可以肯定得到這個錯誤,因爲你的兩列的一個是FLOAT數據類型,而另一個是VARCHARThis article將是一個很好的開始閱讀隱式轉換的地方,當您嘗試比較兩個不同數據類型的列時會發生這種情況。

爲了得到這個工作,需要將float轉換爲varchar,如下例所示。

(
    SELECT [MTRL] FROM dbo.USER_EXCEL 
    EXCEPT 
    SELECT CAST([short_material_number] AS VARCHAR(18)) FROM dbo.IM_Excel 
) 

UNION ALL 

    (
    SELECT CAST([short_material_number] AS VARCHAR(18)) FROM dbo.IM_Excel 
    EXCEPT 
    SELECT [MTRL] FROM dbo.USER_EXCEL 
) 
+0

這應該修復隱式轉換錯誤。 – Barry 2014-10-17 18:47:16

+0

謝謝大家..我是新來的SQL查詢,所以仍然在學習。再次感謝你。 – user3896424 2014-10-17 18:53:21

+0

樂意幫忙!如果這個或任何答案已解決您的問題,請點擊複選標記考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – AHiggins 2014-10-17 18:55:03

0

從你的問題我明白你試圖比較兩列,但只返回一個專欄中,我會建議你使用下面的查詢並排的差異方面比較

SELECT ue.[MTRL], ie.[short_material_number] 
FROM dbo.IM_Excel ie 
FULL OUTER JOIN 
dbo.USER_EXCEL ue 
ON CAST(ie.[short_material_number] AS VARCHAR(20)) = ue.[MTRL] 
WHERE ie.[short_material_number] IS NULL 
OR ue.[MTRL] IS NULL