2010-08-06 78 views

Trả lời

4
declare @FQTROQ varchar(30) 
declare @FQNUTQ decimal(6,0) 
set @FQTROQ = 'R-354' 
set @FQNUTQ = 100 

SELECT CASE WHEN (@FQTROQ is not null and @FQTROQ <> '') 
THEN @FQTROQ 
ELSE CAST(@FQNUTQ AS VARCHAR(30)) END AS Numero_Troquel 

Bạn cần phải cast DECIMAL như một VARCHAR để các đầu ra từ báo cáo kết quả CASE có cùng giá trị đầu ra.

+0

Tôi đã có một tình huống tương tự mà tôi đã cố gắng để có điều kiện chuyển đổi một cột thành thập phân dựa trên nội dung cột. Tôi đã nhận được lỗi này cho đến khi tôi đúc kết quả thập phân của tôi trở lại varchar. Cảm ơn nhiều! – cBlaine

0

Bạn cần phải làm điều này:

SELECT (CASE WHEN (@FQTROQ is not null and @FQTROQ <> '') 
THEN (@FQTROQ) 
ELSE (CAST(@FQNUTQ AS VARCHAR(30))) END) AS Numero_Troquel 

vì giá trị trả về từ một cột cần phải phù hợp, SQL Server sẽ cố gắng để chuyển đổi VARCHAR của bạn đến một NUMERIC, không phải là cách khác xung quanh, đó là những gì bạn có thể muốn.

Quy ước đặt tên đó là gì, btw?

+0

Cảm ơn. Tôi không biết! Nó hoạt động – user354427

0

Đó là vì bạn có 2 biến loại khác nhau và mặc dù bạn chỉ đang cố trả lại MỘT trong các giá trị đó là "Numero_Troquel", chúng phải là loại tương thích. Những gì nó đang làm là cố chuyển đổi biến @FQTROQ thành DECIMAL.

Bạn muốn hoặc cần làm:

SELECT (CASE WHEN (@FQTROQ is not null and @FQTROQ <> '') 
THEN (@FQTROQ) 
ELSE (CAST(@FQNUTQ AS VARCHAR(30))) END) AS Numero_Troquel 

HOẶC ...

IF (@FQTROQ is not null and @FQTROQ <> '') 
    SELECT @FQTROQ AS Numero_Troquel -- this will return as a VARCHAR 
ELSE 
    SELECT @FQNUTQ AS Numero_Troquel -- this will return as a DECIMAL 
+0

Cảm ơn bạn rất nhiều. Câu trả lời dễ dàng Tôi không biết – user354427

Các vấn đề liên quan