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)
你可以这样做
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)
但我不确定你应该这样做