请教一个聚合函数问题

Redshoe 2013-05-13 04:11:22
我用的是SAP bo 后台式SQL2008

现在我做了一个查询,作为CTE
WITH C AS
(SELECT t1.shipdate as 'Requested ShipDate', T2.ACTDELDATE AS 'Actual ShipDate', diff =
CASE
WHEN datediff( HH, t1.shipdate,t2.actdeldate)>0 THEN '1'
WHEN datediff( HH, t1.shipdate,t2.actdeldate)<0 THEN '-1'
WHEN datediff( HH, t1.shipdate,t2.actdeldate)=0 THEN '0'
END

FROM ORDR T0 INNER JOIN RDR1 T1 ON T0.DocEntry = T1.DocEntry

我只截取了一些,大家忽略语法

其中DIFF 列 就有0,-1,1 三种值

我现在的问题是想 计算中三种值的个数,逻辑如下
select count(diff) as late where diff=1
select count(diff) as ontime where diff=0
select count(diff) as earily where diff<0

显示成以下形式,该如何写???
ontime late earily ontime达标率
10 15 20 10/(10+15+20)




...全文
171 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
铁歌 2013-05-31
  • 打赏
  • 举报
回复
不能创建临时表,声明一个表变量也可以,语法参考2楼的 DECLARE @MyTableVar table( id int NOT NULL, value int );
Redshoe 2013-05-13
  • 打赏
  • 举报
回复
这个是CTE的结构


想用SELECT 做成下面的结果
Redshoe 2013-05-13
  • 打赏
  • 举报
回复
谢谢楼上筒子的回复, 我没有权限创建表 包括临时表, 这样也行吗? 就是想用select来做 把CTE作为参考,然后用聚合函数生成结果 开始因为在SAP查询中如果要求日期和实际日期是同一天的话,列值是空的。(开始以为是空值,因为在SAP中是空的,而在SQL里查询的话值就是零) 其实最初的时候 在虚拟机我用SUM(diff())貌似 做过一个,是可以的,时间长了记不起来了,现在又想不起来了 晕。不知道大家有没有好的意见。
MrYangkang 2013-05-13
  • 打赏
  • 举报
回复

--参考一下
create table e
(
	diff nvarchar(10)
)
insert into e 
select '1' union all
select '1' union all
select '1' union all
select '1' union all

select '0' union all
select '0' union all
select '0' union all

select '-1' union all
select '-1' union all
select '-1'
go
select 
count(case when diff = '1' then 1 end) dat1,
count(case when diff = '0' then 1 end) dat2,
count(case when diff = '-1' then 1 end) dat3
from e

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧