Sql 是否按“选择”部分中的“强制转换”字段分组?
在我的主选择部分中有一个字段,我想在报告中按该字段分组Sql 是否按“选择”部分中的“强制转换”字段分组?,sql,oracle,group-by,casting,Sql,Oracle,Group By,Casting,在我的主选择部分中有一个字段,我想在报告中按该字段分组 CAST((SELECT attribute_value.attrib_value_name FROM attribute_value, attribute_type WHERE attribute_type.attrib_type_code = 'SC17' AND attribute_type.attrib_type_code = attribute_value.attrib_type_code AND attribute_va
CAST((SELECT attribute_value.attrib_value_name
FROM attribute_value,
attribute_type
WHERE attribute_type.attrib_type_code = 'SC17'
AND attribute_type.attrib_type_code = attribute_value.attrib_type_code
AND attribute_value.attrib_value_code = feat_attrib_type.attrib_value_code ) as VARCHAR (30)) as ZONE_SPEC,
我曾尝试将相同的代码放在SQL的group部分,但它总是返回一条错误消息
“ORA-00933:SQL命令未正确结束”
到目前为止,我得到的代码是:
select
CAST((SELECT attribute_value.attrib_value_name
FROM attribute_value,
attribute_type
WHERE attribute_type.attrib_type_code = 'SC17'
AND attribute_type.attrib_type_code = attribute_value.attrib_type_code
AND attribute_value.attrib_value_code = feat_attrib_type.attrib_value_code ) as VARCHAR (30)) as ZONE_SPEC,
feature_type.feature_type_name,
sum (feat_measurement.feature_quantity)
from
feature
inner join feature_type on feature.feature_type_code = feature_type.feature_type_code
inner join area on feature.area_code = area.area_code
inner join feat_measurement on feature.plot_number = feat_measurement.plot_number
and feature.site_code = feat_measurement.site_code
inner join measurement_type on feat_measurement.measurement_code = measurement_type.measurement_code
inner join feat_attrib_type on feature.site_code = feat_attrib_type.site_code AND
feature.plot_number = feat_attrib_type.plot_number
where
measurement_type.measurement_code in ('AREA') and
feature.feature_deadflag = 'N'
group by
CAST((SELECT attribute_value.attrib_value_name
FROM attribute_value,
attribute_type
WHERE attribute_type.attrib_type_code = 'SC17'
AND attribute_type.attrib_type_code = attribute_value.attrib_type_code
AND attribute_value.attrib_value_code = feat_attrib_type.attrib_value_code ) as VARCHAR (30)) as ZONE_SPEC,
feature_type.feature_type_name
order by
feature_type.feature_type_name
是否可以将此强制转换字段添加到分组字段中?如果是这样的话,怎么做?如果您试图在GROUPBY子句中投射表达式,我认为这是不允许的。但是,您可以通过使用分区来实现所需的结果。我已经编辑了一点代码
select
feature_type.feature_type_name,
sum (feat_measurement.feature_quantity) OVER (Partition by CAST((SELECT attribute_value.attrib_value_name
FROM attribute_value,
attribute_type
WHERE attribute_type.attrib_type_code = 'SC17'
AND attribute_type.attrib_type_code = attribute_value.attrib_type_code
AND attribute_value.attrib_value_code = feat_attrib_type.attrib_value_code ) as VARCHAR (30)))as ZONE_SPEC
from
feature
inner join feature_type on feature.feature_type_code = feature_type.feature_type_code
inner join area on feature.area_code = area.area_code
inner join feat_measurement on feature.plot_number = feat_measurement.plot_number
and feature.site_code = feat_measurement.site_code
inner join measurement_type on feat_measurement.measurement_code = measurement_type.measurement_code
inner join feat_attrib_type on feature.site_code = feat_attrib_type.site_code AND
feature.plot_number = feat_attrib_type.plot_number
where
measurement_type.measurement_code in ('AREA') and
feature.feature_deadflag = 'N'
group by
feat_measurement.feature_quantity,
feat_attrib_type.attrib_value_code,
feature_type.feature_type_name
order by
feature_type.feature_type_name
希望这有帮助。今天的提示:切换到现代的显式
JOIN
语法。更易于编写(无错误)、更易于读取和维护,并且在需要时更易于转换为外部联接。跳过GROUP BY的列别名尝试作为ZONE_SPEC
。当我尝试按ZONE_SPEC分组时,feature_type.feature_type_name会收到错误消息ORA-00904:“ZONE_SPEC”:无效标识使用联接
。我认为不能通过子查询进行聚合。