Oracle Sql 创建新列时合并所有错误
Oracle Sql Union all error when creating new column
大家早上好。我无法使用 union all 语句将 3 个输出组合在一起。我的查询如下,我收到一条错误消息,指出 ATTR 无效。
想法?
Error report -
SQL Error: ORA-00904: "ATTR": invalid identifier
00904. 00000 - "%s: invalid identifier"
SELECT
"TOC_GENDER" as Attr_Type
,TOC_GENDER as Attr
,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT
,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT
FROM zeta.Customer_table
GROUP BY Attr_Type, attr
union all
SELECT
"TOC_HD_TARGET_SEGMENT" as Attr_Type
,TOC_HD_TARGET_SEGMENT as attr
,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT
,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT
FROM zeta.Customer_table
GROUP BY Attr_Type, attr
union all
SELECT
"TOL_POLK_COMPETITIVE_BRAND" as Attr_Type
,TOL_POLK_COMPETITIVE_BRAND as attr
,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT
,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT
FROM zeta.Customer_table
GROUP BY Attr_Type, attr
ORDER BY Attr_Type, attr;
不要按列的别名分组:
SELECT
"TOC_GENDER" as Attr_Type
,TOC_GENDER as Attr
,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT
,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT
FROM zeta.Customer_table
GROUP BY Attr_Type, attr
应该是
SELECT
"TOC_GENDER" as Attr_Type
,TOC_GENDER as Attr
,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT
,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT
FROM zeta.Customer_table
GROUP BY TOC_GENDER
您不能在 group by
中使用别名。将它们更改为 group by TOC_GENDER
,等等
此外,ORDER BY
与 UNION
一起使用可能很棘手(而且也不能使用别名)。使用当前 ORDER BY
子句将整个查询包装在外部 select
中,或者将其更改为 ORDER BY 1,2
.
要添加具有静态值的列,您需要使用单引号,而不是双引号。单引号用于分隔字符串,而双引号用于分隔标识符(例如 table 名称或列名称)。
由于带有静态字符串的列在整个结果集中只有一个值,因此不需要包含在 GROUP BY
子句中。
大家早上好。我无法使用 union all 语句将 3 个输出组合在一起。我的查询如下,我收到一条错误消息,指出 ATTR 无效。
想法?
Error report -
SQL Error: ORA-00904: "ATTR": invalid identifier
00904. 00000 - "%s: invalid identifier"
SELECT
"TOC_GENDER" as Attr_Type
,TOC_GENDER as Attr
,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT
,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT
FROM zeta.Customer_table
GROUP BY Attr_Type, attr
union all
SELECT
"TOC_HD_TARGET_SEGMENT" as Attr_Type
,TOC_HD_TARGET_SEGMENT as attr
,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT
,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT
FROM zeta.Customer_table
GROUP BY Attr_Type, attr
union all
SELECT
"TOL_POLK_COMPETITIVE_BRAND" as Attr_Type
,TOL_POLK_COMPETITIVE_BRAND as attr
,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT
,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT
FROM zeta.Customer_table
GROUP BY Attr_Type, attr
ORDER BY Attr_Type, attr;
不要按列的别名分组:
SELECT
"TOC_GENDER" as Attr_Type
,TOC_GENDER as Attr
,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT
,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT
FROM zeta.Customer_table
GROUP BY Attr_Type, attr
应该是
SELECT
"TOC_GENDER" as Attr_Type
,TOC_GENDER as Attr
,COUNT (DISTINCT CON_INDIVIDUAL_ID) AS UNIQ_INDIV_ID_CNT
,COUNT (DISTINCT TOC_DEALER_NO) AS UNIQ_DLR_CNT
FROM zeta.Customer_table
GROUP BY TOC_GENDER
您不能在 group by
中使用别名。将它们更改为 group by TOC_GENDER
,等等
此外,ORDER BY
与 UNION
一起使用可能很棘手(而且也不能使用别名)。使用当前 ORDER BY
子句将整个查询包装在外部 select
中,或者将其更改为 ORDER BY 1,2
.
要添加具有静态值的列,您需要使用单引号,而不是双引号。单引号用于分隔字符串,而双引号用于分隔标识符(例如 table 名称或列名称)。
由于带有静态字符串的列在整个结果集中只有一个值,因此不需要包含在 GROUP BY
子句中。