T
带有“计算成本”列的所需输出表:
SvcID代码ID日期最小值单位成本 1 3000 15 4/4/2016 60 10 70 2 3000 17 4/4/2016 45 10 0 3 3000 15 5/2/2016 30 10 70 4 3000 18 5/2/2016 60 10 0 5 3000 10 5/2/2016 30 10 0 6 4200 16 2016年2月1日60 4 60 7 4200 9 2016年2月1日30 2 30
查询以计算和显示:
选择 ... ,案子 当Code = 4200 THEN单位* 15时 当Code = 3000时? END AS费用 从 ... 在哪里输入代码('3000','4200') 通过...分组 ....;
与代码3000相同的日期提供的所有服务的总费用应为70,而与提供的服务数量无关。此代码的“分钟”和“单位”之间没有关系,无法计算成本。
一种方法是将任何一项服务的成本计算为70,并使同一日期的其余服务成本为0。CASE
声明中可以这样做吗?
有什么更好的方法来实现这一目标?
您需要调查Window函数MSDN。
您的情况将变成这样:
-- New select statament
SELECT
...
,CASE
WHEN Code=4200 THEN Units*15
WHEN Code=3000 THEN ( CASE WHEN DuplicateNum = 1 THEN 70 ELSE 0 END )?
END AS Cost
FROM(
-- Your current query (with case statement removed) and ROW_NUMBER() function added
SELECT
..., ROW_NUMBER() OVER( PARTITION BY Code, Date ORDER BY ID ) AS DuplicateNum
FROM ...
WHERE Code IN ('3000','4200')
GROUP BY ....
) AS YourCurrentQuery;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句