2015-10-19 81 views
0

我正在加入一些SQL Server表,並且有一個varchar列需要與數字列匹配。我試圖向列轉換爲bigint,但它會拿出爲什麼這個SQL轉換爲bigint不起作用?

錯誤轉換數據類型爲varchar爲bigint

試圖這樣做的時候。任何人都可以在正確的方向指出我如何解決這個問題?謝謝!

SELECT 
    userid, COUNT(DISTINCT maintlist.maintid) as thecount 
FROM 
    Userlist 
INNER JOIN 
    maintlist ON CONVERT(bigint, MaintList.enteredby) = userid 
INNER JOIN 
    maintnotes ON maintnotes.maintid = maintlist.maintid 
WHERE 
    deptnum <> '0' 
    AND notedate BETWEEN '2015-10-01' AND '11/1/2015' 
GROUP BY 
    userid 
ORDER BY 
    thecount DESC; 
+3

表中必須有記錄不能轉換爲'BIGINT'。 –

+1

你需要挖掘你的數據並檢查它。你會發現它會像'A' - 你不能將它轉換成數字。你可以把你的int轉換成一個varchar。當然,你永遠不會匹配任何'A'和'001'<>'1' –

+1

是BIGINT類型的userid嗎? 'enterby'字段中的所有值都是數字嗎? – DarkKnight

回答

1

如果maintlist表中的一些用戶ID不能從varchar轉換爲bigint,在用戶列表表格轉換的用戶ID爲varchar意味着你的代碼將工作,但您的加盟不會給結果你要。所以我仍然在尋找無法轉換的用戶ID。

+0

這個答案引導我朝着正確的方向發展,並且最終我以不同的方式加入瞭解決問題的表格。謝謝! –

0

感謝您的幫助,我能夠在用戶標識轉換,而不是爲varchar。

SELECT userid, COUNT(DISTINCT maintlist.maintid) as thecount from Userlist inner join maintlist ON MaintList.enteredby = convert(varchar(20),userid) inner join maintnotes on maintnotes.maintid = maintlist.maintid where deptnum <> '0' AND notedate between '2015-10-01' AND '11/1/2015' group by userid order by thecount DESC;