2013-10-19 21 views
0

stockadj1,列category.它有多列(如IDNO,名稱,類別)。但我想得到重複值的類別和一些默認值也來,如果它(表)有或沒有。所以我寫了一個這樣的查詢在PostgreSQL中編寫一個高效的查詢

select 
    'Damages' as category 
union all 
select 
    'Excess Stock' as category 
union all 
select 
    'Shortage' as category 
union all 
select 
    'Stock Journal' as category 
union all 
select 
    distinct category 
from 
    stockadj1 
where 
    category <> '' 
    and lower(category) not in ('damages', 'excess stock', 'shortage', 'stock journal') 
order by 
    category 

的默認值是

'Damages', 'Excess Stock', 'Shortage', 'Stock Journal' 

這些默認值必須配備查詢,以便在用這樣的。但我認爲它的工作很多。如何獲得高效(可行)的解決方案?

EDIT

這裏默認值是指那些值,其可存在於表與否。

我使用PostgreSQL 9.0.3版本

+0

你們從來沒有在庫存控制之前?我知道他直接問的是什麼。 :( –

回答

2

不知道你的意思是什麼「其相當多的工作」,但下面需要打字更

select category 
from stockadj1 
where category <> '' 
union 
values ('Damages'), 
     ('Excess Stock'), 
     ('Shortage') 
     ('Stock Journal') 
order by category; 

union將確保重複被刪除,所以沒有必要做整體結果明顯不同。

0

不會說這是效率低下,亂,一點點脆弱雖然。

創建一個類別表,如果你還沒有。添加一列,以紀念它是默認的,如果不是所有的人都默認那麼它是一個簡單的工會成爲工會是一組操作

select Category from Categories Where IsDefault = 1 
Union 
select category from stockadj1 where category <> '' 

應該不需要鮮明。

看看其餘的部分,用category_id進行標準化將是一個非常好的主意,如果某個辦公室會有一個辦公室表示過度庫存應該是超​​額存貨,那麼您將會處在一個糟糕的地方。

然後,你根本不需要聯合,一切都會從類別表中走出來。

如果您需要將類別設置爲自由格式或從類別中進行選擇,請爲其他類別添加一個類別ID,並在庫存調整,ID和category_description中添加兩個字段。如果catgeory_id是另一個,並且最終結束,只填寫描述。

select Category from Categories Where IsDefault = 1 
Union 
select category_description from stockadj1 s 
Inner join Categories c On c.Category_id = s.Category_Id 
Where c.Category_type = 'Other' 

Category_type表明它是'其他'類型,你想要這種行爲。

應該很好地完成這項工作,只需更改分類表即可保留99%的工作。

+0

謝謝你的答覆先生。stockadj1表有多個列,所以我不能在第一次添加默認值。在frond最終用戶選擇默認值,然後只插入到後端,然後只有我寫了那樣的查詢。告訴他如何以有效的方式更改查詢 – Sathish

+0

「Categories」?表名應該是單數 – CompanyDroneFromSector7G

+0

@SATSON,第一個查詢With Category(多個)表將執行您所要求的內容,不知道其他評論的內容。正如我在我的答案的其餘部分所述,您真正的問題是您的模式效率低下,因此對它的任何查詢都會至少效率低下。 –