首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server中的SAS最大值

SQL Server中的SAS最大值
EN

Stack Overflow用户
提问于 2017-08-15 06:53:40
回答 2查看 123关注 0票数 0

正在尝试重新设计SQL Server中的SAS代码。代码包含一个proc-sql文件,其中包含以下语句。

代码语言:javascript
复制
   sum(case when max(t1,t2) = 0 and transac='D'  THEN sales else 0 end)/sum(sales)

我尝试使用下面的代码将其转换为SQL,但显然是不正确的。希望这里有人能指出正确的方法。

代码语言:javascript
复制
 sum(case when (select max(Tval) from  values(t1,t2) as TVal) = 0 AND transac = 'D' THEN sales else 0)/nullif(sum(sales),0)

还尝试了:

代码语言:javascript
复制
  sum(case when (t1 > t2 AND t1 = 0 OR t2 > t1 AND t2 = 0) AND transac ='D' THEN SALES ELSE 0 END)/nullif(sum(sales),0)

但是,无法使用此方法复制SAS结果。

任何帮助都将不胜感激。

谢谢,B

EN

回答 2

Stack Overflow用户

发布于 2017-08-15 07:28:03

假设t1和t2是列...

您可以使用CTE

代码语言:javascript
复制
WITH CTE1
AS
(SELECT MAX(t1), MAX(t2)
FROM fooTable),

CTE2
AS
(SELECT 
CASE WHEN
SUM(t1 + t2) = 0 AND MAX(fooTable.transac) = 'D' THEN sales
ELSE 0
END AS fooColumn
FROM CTE1, fooTable)

SELECT SUM(fooColumn) / SUM(table.sales)
FROM CTE2, table

我想像这样的东西也许能行得通。但我认为MAX(fooTable.transac)也可能搞砸一些东西。你能提供一个你正在使用的小样本数据吗?

票数 0
EN

Stack Overflow用户

发布于 2017-08-15 10:49:02

您可以检查SQL服务器是否具有类似于SAS中的MAX(,)函数或Teradata中的最大(,)函数。

如果不是,那么只需使用CASE语句来模拟它。替换

代码语言:javascript
复制
max(t1,t2)

使用

代码语言:javascript
复制
case when (t1>t2) then t1 else t2 end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45684189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档