sql - UNION 的第五列在 SAS 中具有不同的数据类型
问题描述
我是一名 SAS 开发人员。我正在使用 PROC SQL 来执行联合语句。我的代码:
proc sql;
create table test3 as
select a.state
,a.station
,a.ca_no
,a.applicant_name
,a.capacity
,a.commission_date
,a.technology
,a.pmu
,a.ppu
,a.ssu_pe
,a.re_switch_no
,a.voltage
,a.vcb_brand_and_model
,a.scada_y_n
,a.gps_coordinate
,a.plant_manager_phone_number
,a.plant_manager_name
,a.plant_manager_email
,a.highest_md_recorded_a
,a.highest_md_recorded_kw
,a.total_energy_sold
%do c=1 %to 12;
,a.kwh_&&ALLDATES&c..
%end;
%do c=1 %to 12;
,a.gen_factor_&&ALLDATES&c..
%end;
,a.period
from test a
union all
select b.pss_no as ca_no
,b.applicant_name /*capacity_mw voltage technology*/
,b.program
,b.scod_date
,b.kick_off_date
from newresheet2 b;
quit;
如您所见,表 B 块中的重命名语句之后的两个表中只有 ca_no。
我收到错误消息:
MPRINT(TRASPOSETRX):proc sql;MPRINT(TRASPOSETRX): 创建表 test3 作为选择 a.state ,a.station ,a.ca_no ,a.applicant_name ,a.capacity ,a.commission_date ,a.technology ,a.pmu ,a.ppu ,a.ssu_pe , a.re_switch_no ,a.voltage ,a.vcb_brand_and_model ,a.scada_y_n ,a.gps_coordinate ,a.plant_manager_phone_number ,a.plant_manager_name ,a.plant_manager_email ,a.highest_md_recorded_a ,a.highest_md_recorded_kw ,a.total_energy_sold ,a.kwh_SEPT17 kwh_oct17,a.kwh_nov17,a.kwh_dec17,a.kwh_jan18,a.kwh_feb18,a.kwh_mar18,a.kwh_apr18,a.kwh_may18,a.kwh_jun18,a.kwh_jun18,a.kwh_july18,a.kwoly18,a.kwh_gh_gh_gen_gen_gen_gen_gen_gen_centoct17 a.gen_factor_NOV17 ,a.gen_factor_DEC17 ,a.gen_factor_JAN18 ,a.gen_factor_FEB18 ,a.gen_factor_MAR18 ,a.gen_factor_APR18 ,a.gen_factor_MAY18 ,a.gen_factor_JUN18 ,a.gen_factor_JULY18 ,a.gen_factor_AUG18 ,a. 从测试工会开始的期间,所有从 newresheet2 b 中选择 b.pss_no 作为 ca_no 、b.applicant_name 、b.program 、b.scod_date 、b.kick_off_date;警告:已使用空列扩展表以执行 UNION ALL 集操作。错误:UNION ALL 的第一个贡献者的第 5 列与第二个贡献者的类型不同。
我检查了两个表中 ca_no 的数据类型,两者都是字符。当我计算表 A 中的第五列(即容量)时,我在表 B 中没有名为 Capacity 的列。事实上,我从表 B 中注释掉了不同名称的 Capacity_MW。这是原因吗?
解决方案
CREATE TABLE test3 AS
SELECT
a.STATE
, a.station
, a.ca_no
, a.applicant_name
, a.capacity
--------- more than 5 -----------
, a.commission_date
, a.technology
, a.pmu
, a.ppu
, a.ssu_pe
, a.re_switch_no
, a.voltage
, a.vcb_brand_and_model
, a.scada_y_n
, a.gps_coordinate
, a.plant_manager_phone_number
, a.plant_manager_name
, a.plant_manager_email
, a.highest_md_recorded_a
, a.highest_md_recorded_kw
, a.total_energy_sold
, a.kwh_SEPT17
, a.kwh_OCT17
, a.kwh_NOV17
, a.kwh_DEC17
, a.kwh_JAN18
, a.kwh_FEB18
, a.kwh_MAR18
, a.kwh_APR18
, a.kwh_MAY18
, a.kwh_JUN18
, a.kwh_JULY18
, a.kwh_AUG18
, a.gen_factor_SEPT17
, a.gen_factor_OCT17
, a.gen_factor_NOV17
, a.gen_factor_DEC17
, a.gen_factor_JAN18
, a.gen_factor_FEB18
, a.gen_factor_MAR18
, a.gen_factor_APR18
, a.gen_factor_MAY18
, a.gen_factor_JUN18
, a.gen_factor_JULY18
, a.gen_factor_AUG18
, a.period
FROM test a
该部分有超过 5 列:以下部分确实有 5 列:
UNION ALL
SELECT
b.pss_no AS ca_no
, b.applicant_name
, b.program
, b.scod_date
, b.kick_off_date
FROM newresheet2 b;
联合要求每个子查询中的列数相同,并且这些列中的每一个都必须是“兼容的”数据类型(例如,整数将进入十进制列,但 varchar 不会进入日期列)。
这些柱对是否兼容?
SELECT
a.STATE
, a.station
, a.ca_no
, a.applicant_name
, a.capacity
FROM test a
UNION ALL
SELECT
b.pss_no AS ca_no
, b.applicant_name
, b.program
, b.scod_date
, b.kick_off_date
FROM newresheet2 b;
列的“对齐”不是通过列名/别名来实现的,而是通过 select 子句中的位置来实现的,a.ca_no 下方与 b.pss_no 对齐,a.applicant_name 与 b.applicant_name 对齐
SELECT
a.ca_no
, a.applicant_name
FROM test a
UNION ALL
SELECT
b.pss_no AS ca_no
, b.applicant_name
FROM newresheet2 b;
推荐阅读
- python - 未使用 googletrans API 翻译的字符串
- python-3.x - 训练一个 spaCy NER 模型,损失随着迭代和批次不断增加
- mysql - TypeError:在带有 SQL 查询的 Node js 中提供时,参数回调必须是一个函数
- python - 如何在 python 中处理具有许多特性的 LSTM?
- haskell - 递归函数如何在 Haskell 中工作
- javascript - 如何以这种形式将 HTML 与 Javascript 分开?
- loops - 这段代码的归纳不变量是什么?
- spring-boot - Spring Boot - Tomcat - Apache2 - HTTP 503 错误 - ProxyIOBufferSize
- javascript - “x”不是函数
- azure - Azure 函数:具有不同身份验证的多个函数