![](/img/trans.png)
[英]PostgreSQL : Display multiple columns from one column value based on conditions
[英]PostgreSQL Update Column based on Multiple Conditions
設置:
我使用PostgreSQL 9.1.2並具有一個基本表,如下所示,其中有4個二進制列可以采用值Y或N。這些列還主要包含Null值,在下表中將其表示為“-” :
Binary Col 1 Binary Col 2 Binary Col 3 Binary Col 4 Summary Col
------------ ------------ ------------ ------------ -----------
1. Y N - N 1
2. - Y N Y 2
3. N N - N 0
4. - - - - -
5. Y Y Y Y 4
問題:
我想在表格中包括一個“ 摘要列” ,該列基於這4個二進制列中出現的“ Y”數來填充。 我在上表中給出了5個示例條目,以展示所需的輸出。 需要注意的重要一件事是,我希望能夠區分諸如條目3(未觀察到“ Y”)的情況與諸如條目4(所有二進制列均為空)的情況。 這是一次性的工作,並且對於此重復列將如何影響表的事務處理速度,我沒有任何性能方面的擔憂。
我研究了很多PostgreSQL“更新表”示例,並在此處查看了手冊。 但是,我找不到具有多個條件的更新過程的示例,我認為這是這里所需要的。
還是我完全錯了,並且解決方案需要SQL函數或觸發器,任何提示或建議?
select
c1, c2, c3, c4,
(coalesce(c1, '') = 'Y')::integer
+ (coalesce(c2, '') = 'Y')::integer
+ (coalesce(c3, '') = 'Y')::integer
+ (coalesce(c4, '') = 'Y')::integer
total_Y,
(c1 is null)::integer
+ (c2 is null)::integer
+ (c3 is null)::integer
+ (c4 is null)::integer
total_null
from t
巧合的是,sum函數具有您要查找的行為。 您只需要將值轉換為行:
UPDATE some_table SET summary = (SELECT SUM(v::int) FROM (VALUES (col1),(col2),(col3),(col4)) as x(v));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.