【发布时间】:2014-07-12 10:57:01
【问题描述】:
下面是我当前的 SELECT CASE 语句:
SELECT CASE
WHEN edition = 'STAN' AND has9 = 1 THEN '9'
WHEN edition = 'STAN' AND has8 = 1 THEN '8'
WHEN edition = 'STAN' AND has7 = 1 THEN '7'
WHEN edition = 'STAN' AND hasOLD = 1 THEN 'OLD'
WHEN edition = 'SUI' AND has_s9 = 1 THEN 'S9'
WHEN edition = 'SUI' AND has_s8 = 1 THEN 'S8' ELSE 'S7' END AS version
我并不总是想重复 edition = 'xxx' 的条件,比如
CASE WHEN edition = 'STAN' AND has9 = 1 THEN '9' ELSE WHEN has8 = 1 THEN '8' ELSE WHEN has7 = '7' ELSE WHEN edition 'SUI' AND has_s9 = 1 THEN 'S9' ELSE ...
在 Excel 中这相当容易,但如何在 PostgreSQL 中编译它?
【问题讨论】:
-
从您当前的 SELECT CASE 语句来看,您需要检查您的数据模型。 has9、has8、has7 和 hasOld 是互斥的,或者它们之间存在某种层次结构。在这两种情况下,您最好重构您的数据模型。
-
我同意,这只是一个缩短的版本,因为我的优先级是嵌套 case when 语句。你是对的,有一些层次结构,完整的读起来像
SELECT CASE WHEN edition = 'STAN' AND has9 = 1 THEN '9' WHEN edition = 'STAN' AND has9 = 0 AND has8 = 1 Then '8' etc.你指的是帕特里克吗?
标签: sql postgresql case-when nested-queries multiple-conditions