2016-08-03 7 views
0

私は出力として期待される結果を得られなかったクロス集計SQLを持っています。私は最初の列にすべての値を持っています。ここに私のsqlです:クロス集計を使用して適切な列に値を取得する方法は?

select * from crosstab 
('select p.name::text as product, 
pc.name as prod_cat, 
sum(ms.qtyonhand) as total_stock from adempiere.m_product p 
join adempiere.m_product_category pc on p.m_product_category_id=pc.m_product_category_id 
join adempiere.m_storage ms on ms.m_product_id=p.m_product_id 
group by prod_cat,product order by 3 desc') as ct 

(product text, 
"ELECTRICAL & ELECTRONIC ITEMS" numeric, 
"ACADEMICS BOOKS" numeric, 
"Standard" numeric, 
"FOOD AND BEVERAGES" numeric, 
"Possibly Product Category" numeric, 
"Pharmacy Medicine" numeric, 
    "COMPUTER & ACCESSORIES" numeric) 
limit 10 

、これは私が得た出力である:どのように私は得るために、私のクエリを変更することができます

product    | Electricals | Electronics | Food & Beverages | Cosmetics | Hardwares 
---------------------|-------------|---------------|-------------------|------------|------------- 
Samsung-WM   |    |  4552  |     |   |   
Videocon-Refridge |    |  1254  |     |   |    
Philips-CFL Bulbs | 5677  |    |     |   |    
Head&shoulder Shampoo|    |    |     |  4567 |    
Candysweet   |    |    |  5678  |   |    
Icecreams   |    |    |  6785  |   |    
Paints    |    |    |     |   |  9876 
Taps     |    |    |     |   |  10987 
Electrical wires  | 18796  |    |     |   |    

http://i.stack.imgur.com/w6gc5.png

これは私が探していますが出力されます適切な結果ですか?

+0

画像を投稿しないでください。期待した結果は何でしたか? – e4c5

答えて

0

この関数は、2つのクエリ:crosstab(text source_sql, text category_sql)を使用する必要があります。 2番目のクエリでは、すべてのカテゴリ値を希望の順序で選択します。


簡単な例 - 私の自宅の予算:

create table expenses (subject text, person text, cost int); 
insert into expenses values 
('dress', 'wife', 200), 
('toy', 'son', 100), 
('beer', 'me', 50); 

概要:

select * 
from crosstab (
    $ct$ 
    select * from expenses 
    order by 1, 2 
    $ct$ 
    ) as ct (subject text, wife int, son int, me int); 

subject | wife | son | me 
---------+------+-----+---- 
beer | 50 |  | 
dress | 200 |  | 
toy  | 100 |  | 
(3 rows) 

まあ、これは私が信頼できるものではありません。

クエリは穴のあるデータを生成するとき、あなたはそれがvaluecategoryた属するかを認識することができますどのようにcrosstab()を教えてください:

select * 
from crosstab (
    $ct$ 
    select * from expenses 
    order by 1, 2 
    $ct$, 
    $ct$ 
    select person from expenses 
    order by 1 desc 
    $ct$ 
    ) as ct (subject text, wife int, son int, me int); 

subject | wife | son | me 
---------+------+-----+---- 
beer |  |  | 50 
dress | 200 |  | 
toy  |  | 100 | 
(3 rows)   

2番目のクエリは、単純なカテゴリのリストを返します:'wife', 'son', 'me'(順序は重要です)。 values ('wife'), ('son'), ('me')も使用できます。

+0

私に例を教えてもらえますか? –

+0

ご協力いただきありがとうございます。完璧に機能しました。 –

関連する問題