【发布时间】:2015-09-18 09:27:08
【问题描述】:
要产生的输出
将此作为参考,但现在使用不同的场景SQL Server query : get the sum conditionally
解释:
项目、销售和备注列是从数据库中给出的列,新销售列是一个公式化的列,其中除了默认的 n/a 备注外,它获取具有相同关键字备注的项目的总和。
(尽管备注不完全相同,至少有一个共同的相似之处,如上图所示 - 项目 5 中包含“新”,但仍与项目 6 总结,因为它们的相似关键字发现“小")
使用的代码
FIRST OPTION- using partition - 这不起作用,因为当备注彼此不相同时,将无法正确获得总和(对于 item5 和 item6)
CASE
WHEN ([remarks] not like '%big%') AND ([remarks] not like '%PAENGS%')
THEN sales
ELSE SUM(sales) OVER(PARTITION BY [remarks])
END as 'New Sales'
第二个选项 - 使用交叉应用 - 所以它让我这样做,但我迷失了,因为它没有得到所需的输出。
CROSS APPLY
SELECT
d.*,
NewSales =
CASE
WHEN ([remarks] not like '%big%') or ([remarks] not like '%small%')
THEN Sales
ELSE x.NewSales
END
FROM #MSRSuperFinal3 d
CROSS APPLY(SELECT NewSales = SUM(Sales)
FROM #MSRSuperFinal3
WHERE ([remarks] like '%big%') or ([remarks] like '%small%')
)x
我们将不胜感激任何帮助
【问题讨论】:
-
你可以添加一些数据而不是图片或给fiddle吗?
-
@wewestthemenace 请帮我解决这个问题
标签: sql sql-server sql-server-2008 cross-apply