您好我创建了一个计算总和col1 / sum col2的视图 但是col1包含预定义值100,150,45,50,60和NA。 col1的数据类型是varchar,col2的数据类型是数字。我已经在我的声明中设置了一个条件,如果col1的值为'NA',则不执行任何计算但是我不断从应用程序端获得此错误“将数据类型转换为数字时出错”
IF EXISTS(SELECT * FROM dbo.sysobjects WHERE ID = OBJECT_ID(N'ROM_PAD_REPORT') AND XTYPE = 'V')
DROP VIEW ROM_PAD_REPORT
GO
CREATE VIEW [dbo].[ROM_PAD_REPORT]
AS
SELECT DISTINCT CAST(NULL AS UNIQUEIDENTIFIER) AS PK,
DTS.PK AS PPK,
A.PROD_BLOCK,
A.ELEVATION,
A.MATERIAL_TYPE,
A.SAMPLE_COUNT,
A.QC_SAMPLE_COUNT,
A.TRUCK_CAPACITY,
A.CONTENT,
A.Valuegt AS GRAMS_PER_BLOCK,
A.DATE_DISPACTHED as DATE_DISPATCHED
FROM ( SELECT RP.PROD_BLOCK,
MIN(RP.ELEVATION) AS ELEVATION,
MAX(RP.MATERIAL_TYPE)AS MATERIAL_TYPE,
MAX(RP.DATE_DISPACTHED) AS DATE_DISPACTHED,
SUM(CAST (RP.TRUCK_CAPACITY AS varchar(8))) AS TRUCK_CAPACITY,
SUM(RP.CONTENT) AS CONTENT,
(SUM(CAST(RP.TRUCK_CAPACITY AS varchar(8)))/SUM(RP.CONTENT)) AS Valuegt,
(SELECT COUNT(DD.SAMPLE_ID) FROM ROM_PAD_DATA DD WHERE DD.PROD_BLOCK = RP.PROD_BLOCK) AS SAMPLE_COUNT,
(SELECT COUNT(DD.SAMPLE_ID) FROM ROM_PAD_DATA DD WHERE DD.PROD_BLOCK = RP.PROD_BLOCK and DD.SAMPLE_TYPE IN ('STD', 'BLANK')) AS QC_SAMPLE_COUNT
FROM ROM_PAD_DATA RP
WHERE RP.TRUCK_CAPACITY <> 'NA'
GROUP BY RP.PROD_BLOCK) A
JOIN ROM_PAD_DATA B ON A.PROD_BLOCK = B.PROD_BLOCK
JOIN DATASET DTS ON (B.PPK = DTS.PK)
JOIN BUS_UNIT BU ON (BU.PK = DTS.PPK)
GO
GRANT SELECT ON ROM_PAD_REPORT TO sableApp
GO
答案 0 :(得分:0)
将您的WHERE RP.TRUCK_CAPACITY <> 'NA'
条件替换为:
WHERE CAST(RP.TRUCK_CAPACITY AS NVARCHAR(MAX)) <> 'NA'
不同数据类型的比较将生成此错误,对于此方案,我们需要将RP.TRUCK_CAPACITY
中的值显式转换为字符串。