2013-05-06 20 views
-3

我在oracle 10g中有下表(company_details)。简单GWT中的动态SQL查询和输出

STATE  COMPANY_NAME  AVG_SAL 
KN    GOO    $5500 
IN    SCOPE    $6000 
AR    FB    $8250 
CL    PAL    $4500 
CL    GOO    $6000 
AR    GOO    $7000 
IN    FB    $3999 

我想要形成一个如下所示的输出并将其显示在简单的GWT数据网格中。

STATE count(goo) AVG_SAL count(SCOPE) AVG_SAL count(FB) AVG_SAL count(PAL) AVG_SAL 
KN  1   5500  --   --   --  --  --   -- 
IN  --   --   1   6000  1  3999  --   -- 
AR  1   7000   --   --   1  8250  --  -- 
CL  1   6000  --    --  --   --  1  4500 

我试着写下面的查询,但它没有奏效。请帮助

select 
    state, 
    count(*)as "GOO_Records", to_char(SUM(average_sal),'$999,999') as "GOO_AVGSAL" 
    from company_details 
where company_status = 'OPEN' and COMPANY_NAME = 'GOO' group by state order by state 
union 
select 
    state, 
    count(*)as "FB_Records", to_char(SUM(average_sal),'$999,999') as "FB_AVGSAL" 
    from company_details 
where company_status = 'OPEN' and COMPANY_NAME = 'FB' group by state order by state 

任何帮助表示赞赏。提前致谢!!!!

+0

我尝试使用透视,但我的数据库仍处于10g和我米,自我尝试加入。我被困在形成我的查询。 – Ryan 2013-05-06 11:35:26

回答

2

试试这个:

SELECT 
    state, 
    GooCount, 
    GooCount /Total AS AVG_GOO, 
    sCOPECount, 
    SCOPECount/Total AS AVG_SCOPE, 
    FBCOunt, 
    FBCount /Total AS AVG_FB, 
    PALCount, 
    PALCount /Total AS AVG_PAL 
FROM 
(
    select 
     state, 
     SUM(CASE WHEN COMPANY_NAME = 'GOO' THEN 1 ELSE 0 END) AS GooCount, 
     SUM(CASE WHEN COMPANY_NAME = 'SCOPE' THEN 1 ELSE 0 END) AS SCOPECount, 
     SUM(CASE WHEN COMPANY_NAME = 'FB' THEN 1 ELSE 0 END) AS FBCount, 
     SUM(CASE WHEN COMPANY_NAME = 'PAL' THEN 1 ELSE 0 END) AS PALCount,  
     COUNT(*) AS total 
    from company_details 
    where company_status = 'OPEN' 
    group by state order by state 
) AS sub; 
+0

@ user2354279 - 随时欢迎您:)欢迎来到Stackoverflow。如果您发现它有帮助,请尝试接受答案,方法是检查答案左侧的标记,这是Stackoverflow中的工作方式,谢谢:) – 2013-05-06 14:34:08