我的工作查询如下:
SELECT DISTINCT col1, col2,
CASE
WHEN COUNT(DISTINCT col3_typeID) OVER (PARTITION BY col1) = 1
THEN col3_typeID <-- this is what interests me
WHEN COUNT(DISTINCT col3_typeID) OVER (PARTITION BY col1) > 1
THEN COUNT(DISTINCT col3_typeID) OVER (PARTITION BY col1)
END
COUNT(col4) OVER (PARTITION BY col1)
FROM table
-- joins
-- other conditions
我计算了一些内容,如果COUNT() = 1
,那么我会返回ID
而不是其中一些ID。理想情况下,我想返回ID
的CHAR值。如果我尝试用CHAR
类型的列替换上面标记的行,我会得到
ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
我还试过DECODE()
:
THEN DECODE(col3_typeID, 1 , 'type1'
2, 'type2' )
但是我自然会得到同样的错误,因为这是一个基本的数据类型限制。
有解决方案吗?
答案 0 :(得分:4)
Dim func1 As String
func1 = DashboardSheet.Range("D15").Value
Dim result As Range
Set result = OpenJobsCalcSheet.Range("B:B").Find(func1)
If result Is Not Nothing Then
result.Select
Else
MsgBox "Woopsie!"
End If
表达式的所有分支都需要返回相同的数据类型 - 在您的情况下,需要返回case
。您可以通过将第二个char
分支中的数字明确转换为when
来实现此目的:
char
答案 1 :(得分:1)
您正在CHAR
和/或NUMBER
条款中混合不相关的类型(THEN
和ELSE
作为错误消息)。虽然有些数据库会自动转换它们,但不需要使用标准的数据库。
因此,您应该CAST(number AS CHAR(1))
。{/ p>
在我写的一篇文章中找到完整的故事:
答案 2 :(得分:0)
每个CASE的类型必须可以转换为相同的类型。您试图在第一种情况下返回CHAR,并在第二种情况下返回COUNT()(一个bigint)的结果。
您可以A)将它们强制转换为相同的类型(CAST)或B)返回包含两个结果的记录。