我需要将列的特定值作为列名,而不是通过使用以下查询结果
将行转换为列块引用
SELECT AAA.fin_year_quarter,AAA.GEOG_STATE_NAME,AAA.SKU_NAME,SUM(AAA.VALUE)
FROM (
SELECT DISTINCT dm.fin_year_quarter,FCPS.TERRITORY_SID,
DG.GEOG_STATE_NAME,dp.sku_name,
SUM(FCPS.PRIMARY_SALES_VALUE) AS VALUE
FROM fact_chw_primary_sales FCPS,DIM_GEOGRAPHY
DG,dim_productdp,dim_month dm
WHERE FCPS.TERRITORY_SID=DG.TERRITORY_SID
and fcps.product_sid=dp.product_sid
and fcps.month_sid=dm.month_sid
AND DM.MONTH_SID=5845
GROUP BY FCPS.TERRITORY_SID,DG.GEOG_STATE_NAME,
dp.sku_name,dm.fin_year_quarter
)AAA
GROUP BY AAA.GEOG_STATE_NAME,AAA.SKU_NAME,AAA.fin_year_quarter
ORDER BY AAA.GEOG_STATE_NAME ASC, SUM(AAA.VALUE) DESC,AAA.SKU_NAME ASC;
此查询的结果是: -
FIN_YEAR_QUARTER GEOG_STATE_NAME SKU_NAME **SUM(AAA.VALUE)**
**2015-2016-Q4** DELHI-0801 PVPM0017G 4195295
2015-2016-Q4 DELHI-0801 RGPRM035G 3191880
2015-2016-Q4 DELHI-0801 RGPM0035G 1397599
2015-2016-Q4 DELHI-0801 PVPR0017G 250369.5
2015-2016-Q4 DELHI-0801 PVPM0180G 65248.22
2015-2016-Q4 DELHI-0801 PVPM1000G 42258.18
2015-2016-Q4 DELHI-0801 PVPS0380G 9272.4
但我的要求与上述查询一样: -
FIN_YEAR_QUARTER GEOG_STATE_NAME SKU_NAME **2015-2016-Q4**
**2015-2016-Q4** DELHI-0801 PVPM0017G 4195295
2015-2016-Q4 DELHI-0801 RGPRM035G 3191880
2015-2016-Q4 DELHI-0801 RGPM0035G 1397599
2015-2016-Q4 DELHI-0801 PVPR0017G 250369.5
2015-2016-Q4 DELHI-0801 PVPM0180G 65248.22
2015-2016-Q4 DELHI-0801 PVPM1000G 42258.18
2015-2016-Q4 DELHI-0801 PVPS0380G 9272.4
第三季度的结果将如下: -
"FIN_YEAR_QUARTER" "GEOG_STATE_NAME" "SKU_NAME" **"2015-2016-Q3"**
**2015-2016-Q3** BOMBAY-0802 PVPM00173G 5195292
2015-2016-Q3 BOMBAY-0802 RGPRM0353G 4191881
2015-2016-Q3 BOMBAY-0802 RGPM00353G 39759
2015-2016-Q3 BOMBAY-0802 PVPR00173G 2503.5
2015-2016-Q3 BOMBAY-0802 PVPM01803G 652.22
2015-2016-Q3 BOMBAY-0802 PVPM10003G 14225.18
2015-2016-Q3 BOMBAY-0802 PVPS03803G 927200.4
此结果将成为DM.MONTH_SID的基础,请建议其需要完整。
答案 0 :(得分:2)
首先,您不能将2015-2016-Q4
作为列名。由于它以数字开头并且中间包含连字符,因此您将遇到以下错误:
ORA-00923: FROM keyword not found where expected
但是,您可以将column name
用作Q4_2015_2016
使用动态SQL尝试这样的事情 -
DECLARE
sql_query varchar(400);
Var1 varchar2(20);
BEGIN
select distinct
(case FIN_YEAR_QUARTER when '2015-2016-Q4' then 'Q4_2015_2016' else 'NOT Q4' end )
into Var1
from SALES;
sql_query := ' select GEOG_STATE_NAME,FIN_YEAR_QUARTER,value as ' || var1 || '
from SALES ' ;
dbms_output.put_line('Generated SQL is => ' ||chr(10)||chr(13)|| sql_query);
END;
Pl / sql Block输出:
上面生成的查询的输出:
PS:在SQL_QUERY