在开窗函数中使用 Case ( OVER (Partition))

rya*_*yan 5 sql-server sql-server-2008 window-functions

我正在尝试完成以下任务:

SELECT 
   *,
   CASE WHEN 1 THEN SUM(b.myField) ELSE AVG(b.myField) END OVER (PARTITION BY ID)
FROM tbl a
LEFT JOIN tbl2 b ON a.ID = b.aID
Run Code Online (Sandbox Code Playgroud)

这可能与 SQL Server 中的窗口函数有关吗?

我能够在没有 case 语句的情况下完成以下操作:

SELECT 
   *,
   SUM(b.myField) OVER (PARTITION BY ID)
FROM tbl a
LEFT JOIN tbl2 b ON a.ID = b.aID
Run Code Online (Sandbox Code Playgroud)

小智 5

你可以试试这个:

SELECT 
   *,
   CASE WHEN (SUM(b.myField) 
OVER (PARTITION BY ID))=1 THEN SUM(b.myField)
 ELSE AVG(b.myField) END 
FROM tbl a
LEFT JOIN tbl2 b ON a.ID = b.aID
Run Code Online (Sandbox Code Playgroud)


pod*_*ska 0

你可以这样做

SELECT *, CASE 
    [something]
    WHEN 1 THEN SUM(myfield) OVER (PARTITION BY ID) 
    ELSE AVG(myfield) OVER (PARTITION BY ID) END 
FROM yourtable
Run Code Online (Sandbox Code Playgroud)

但我不确定你应该这样做