【发布时间】:2020-03-26 16:37:38
【问题描述】:
我有一个医生执照注册数据集,其中包括每位医生的 total_submitted_charge_amount 以及医疗保险和医疗补助的权利数量。我使用了下面建议的答案中的查询:
with datamart AS
(SELECT npi,
provider_last_name,
provider_first_name,
provider_mid_initial,
provider_address_1,
provider_address_2,
provider_city,
provider_zipcode,
provider_state_code,
provider_country_code,
provider_type,
number_of_services,
CASE
WHEN REPLACE(num_entitlement_medicare_medicaid,',', '') ='' THEN
null
ELSE CAST(REPLACE(num_entitlement_medicare_medicaid,',', '') AS DECIMAL)
END AS medicare_medicaid_entitlement,
CASE
WHEN REPLACE(total_submitted_charge_amount,',', '') ='' THEN
null
ELSE CAST(REPLACE(num_entitlement_medicare_medicaid,',', '') AS DECIMAL)
END AS total_submitted_charge_amount
FROM cmsaggregatepayment2017)
SELECT *
FROM datamart
ORDER BY total_submitted_charge_amount DESC
不幸的是我得到了错误
INVALID_CAST_ARGUMENT:无法将 VARCHAR '' 转换为 DECIMAL(38, 0)
此查询针对aggregatepayment_data_2017 数据库运行,除非查询限定。请在我们的论坛上发布错误消息或使用查询 ID:be01d1e8-dc4d-4c75-a648-428dcb6be3a5 联系客户支持。”我尝试了十进制、实数、大整数,但没有任何方法可以转换 num_entitlement_medicare_medicaid。下面是数据的截图:
有人可以建议如何改写这个查询吗?
【问题讨论】:
-
更好的方法是通过创建没有逗号的新输入文件来“清理”数据,或者使用
CREATE TABLE AS创建一个删除了逗号的新表(使用替换功能)。然后,您可以从新表中查询,而无需强制转换/替换任何内容。 -
@JohnRotenstein 如果我遵循您的方法,查询将如何重组
-
您将首先 Create a Table from Query Results (CTAS) - Amazon Athena 包含
CAST(REPLACE...)技术,如您的问题所示,但它将结果存储到新表中。然后,您可以从新表中查询而无需转换/替换,因为它已经是您想要的格式。这种方法的好处是后面的所有查询都很容易写。 -
@JohnRotenstein 你能根据你试图解释的内容改写我的查询吗?
-
double呢?
标签: amazon-web-services amazon-s3 presto amazon-athena