美好的一天我对我的非功能性代码有疑问。如您所见,我想将一些表与union连接起来。我想有营销应用程序的记录,但我需要使用一些算术运算符。问题是,即使我将数据类型设置为数字,代码不起作用(但在另一个转换中没有问题)并报告错误“数字值''无法识别”我发送完整代码,但问题是这一行:
var elements = new[] {
new { Value = 1, Type = typeof(Color) },
new { Value = 2, Type = typeof(Theme) },
...
};
或者这个:
(case when skl."impressions_sklik" = 0 then 0
when skl."clicks_sklik" = 0 then 0
when skl."clicks_sklik" = '' then 0
when skl."impressions_sklik" = '' then 0
ELSE (iff(skl."clicks_sklik" = 0 or skl."clicks_sklik" IS NULL or
skl."clicks_sklik" = '', 0, skl."clicks_sklik") /
iff(skl."impressions_sklik" = 0 or skl."impressions_sklik" IS NULL
or
skl."impressions_sklik" = '', 0, skl."impressions_sklik"))
END) as "CTR"
FROM "sklik" skl
或者说,没有任何作用:
(case when skl."impressions_sklik" = 0 then 0
when skl."clicks_sklik" = 0 then 0
when skl."clicks_sklik" = '' then 0
when skl."impressions_sklik" = '' then 0
when skl."clicks_sklik" IS NULL then 0
WHEN skl."impressions_sklik" IS NULL then 0
ELSE (skl."clicks_sklik" / skl."impressions_sklik")
END) as "CTR"
你能帮我解决这个问题吗?
完整代码:
(case when skl."impressions_sklik" = 0 or skl."clicks_sklik" = 0 then
skl."clicks_sklik" / skl."impressions_sklik" = 0
when skl."clicks_sklik" = '' or skl."impressions_sklik" = '' then
skl."clicks_sklik" / skl."impressions_sklik" = 0
when skl."clicks_sklik" IS NULL or skl."impressions_sklik" IS NULL
then skl."clicks_sklik" / skl."impressions_sklik" = 0
ELSE (skl."clicks_sklik" / skl."impressions_sklik")
END) as "CTR"
FROM "sklik" skl
答案 0 :(得分:0)
这里有两个不同的问题。
首先,如果" impressions_sklik"和" clicks_sklik"被定义为NUMERIC,将它们与文本值'进行比较是无效的。这就是您获得"数字值未识别消息"
的地方其次,如果" impressions_sklik"为NULL,您将在CASE语句中遇到被零除的问题。
要解决这两个问题,请重写为更简单的以下表达式:
(case
when skl.impressions_sklik = 0 or skl.impressions_sklik IS NULL then 0
when skl.clicks_sklik = 0 or skl.clicks_sklik IS NULL then 0
ELSE ( skl.clicks_sklik / skl.impressions_sklik)
END) as CTR