2015-12-30 42 views
1

拥有两个表格,库存和批次,我使用库存表来保存项目的描述,包括项目以及由字段inventory.type作为inventory.type ='isInventoryItem'过滤的项目或inventory.type ='Variety'和inventory.invid作为TEXT,还有lot表。PostgreSQL通配符和子选择计数

invid  | type 
Sugraone  | Variety 
Autumn Royal | Variety 
Flame  | Variety 
Summer Royal | Variety 
Red Globe | Variety 

和项目像这样:

 invid        |  type 
    Sugraone 19#Pouch Free Bird Ctn B   | isInventoryItem 
    Red Globe 21#PlainSO Chelan Starr 7L Sty | isInventoryItem 
    Flame 19#Pouch SO2 Puro Filete 5L Styro A | isInventoryItem 

我希望能够选择从库存类型=“百变”,并使用按类别统计的大量表中的情况下,像在inventory.invid我试试这个:

SELECT COUNT(inventory.*) AS lots, invid FROM lots 
INNER JOIN inventory ON lots.inventory_id = inventory.inventory_id 
WHERE invid ILIKE ANY (SELECT '%' || invid || '%' 
from inventory WHERE type ='isInventoryItem') GROUP BY invid; 

与没有成功,我想这样的输出:

invid  | count 
Sugraone  | 5 
Autumn Royal | 6 
Flame  | 3 
Summer Royal | 7 
Red Globe | 23 

这样做的方法是什么。

编辑:我添加了一个视图(items_view)仅列出因维人的姓名已经过筛选,只得到项目的列表来搜索类别,让简单:

     name      

Flame 19#Pouch Acosta Produce Ctn B 
Flame 19#Pouch Acosta Produce Ctn B 
Flame 19#Pouch SO2 J.A.P. Black 5L Styro B 
Red Globe 21#PlainSO Chelan Starr 7L Sty 
Red Globe 21#PlainSO Chelan Starr 7L Sty 
Sugraone 19#Pouch Free Bird Ctn B 
Summer Royal 19#Pouch SO2 SF White Od 5L Styro A 
Summer Royal 19#Pouch Top Gun Cnt A 

我能得到的类别这样的名单:从库存其中type =“百变”选择INID,我得到如下列表:

invid  
-------------- 
Sugraone 
Autumn Royal 
Flame 
Summer Royal 
Red Globe 

现在的问题是如何通过列表进行这一类列表循环,如下

invid  | count 
Sugraone  | 1 
Autumn Royal | 2 
Flame  | 3 
Summer Royal | 2 
Red Globe | 2 

回答

2

您使用行invidtype = 'isInventoryItem'作为使用喜欢的库存物品清单上统计出来,得到的结果一种模式。相反,使用行与type = 'Variety'的模式:

SELECT invid 
,  COUNT(inventory.*) AS lots 
FROM lots 
INNER inventory 
ON  lots.inventory_id = inventory.inventory_id 
WHERE inventory.type = 'isInventoryItem' 
     AND invid ILIKE ANY 
     (
     SELECT '%' || invid || '%' 
     FROM inventory 
     WHERE type = 'Variety' 
     ) 
GROUP BY 
     invid 

作为一个侧面说明,考虑研究database design and normal forms。您可能应该有一个单独的表,用于类别的库存,而不是在库存表中包含这些类别。

+0

你是绝对正确的有一个类别表,可悲的是设计不是我的 – Jose

+0

我编辑了问题的清晰度,我认为与您的答案和一些解决方法,我找到了满足条件的方式,但我仍然没有找到办法 – Jose