带PARTITION的SQL- Case语句

时间:2018-08-31 21:29:02

标签: sql sql-server

如何检查一个ID是否有多个不同的行?在下表VBELN中,15233有两个VB_TYPE。我需要检查VBELN是否具有'p'和'R'以及condition1。 VBELN 25344只有R,所以我的else逻辑将有-if(VBELN不包含p),那么condition2

+-------+---------+
| VBELN | VB_TYPE |
+-------+---------+
| 15233 | p       |
+-------+---------+
| 15233 | R       |
+-------+---------+
| 25344 | R       |
+-------+---------+
| 26455 | p       |
+-------+---------+
| 26455 | R       |
+-------+---------+

我尝试了下面的case语句,但是我无法思考这种逻辑。

SQL:

CASE WHEN (Count(VBELN) OVER (PARTITION BY VBELN))=2  THEN CONDITION 1
     ELSE CONDITION 2
     END

有比count()更好的逻辑吗?

1 个答案:

答案 0 :(得分:1)

如果类型不重复,您的代码就可以了。

(CASE WHEN (Count(VBELN) OVER (PARTITION BY VBELN)) = 2
      THEN CONDITION 1
      ELSE CONDITION 2
 END)

如果您有两种类型,那么这更接近您想要的类型:

(CASE WHEN MIN(VB_TYPE) OVER (PARTITION BY VBELN) <> MAX(VB_TYPE) OVER (PARTITION BY VBELN)
      THEN CONDITION 1
      ELSE CONDITION 2
 END)

如果还有其他类型,那么逻辑可以完成,但要复杂一些。