如果在类似下面的数据集上,我希望能够执行相当于计数的操作。我找到了类似的here,但我不确定如何将其翻译成企业指南。我想创建几个新列,按年计算每个主键的日期出现次数,例如:
PrimKey Date
1 5/4/2014
2 3/1/2013
1 10/1/2014
3 9/10/2014
要成为这样:
PrimKey 2014 2013
1 2 0
2 0 1
3 1 0
我希望在查询构建器中使用计算字段的高级表达式选项,但是如果有另一种更好的方法我完全打开。 这是我尝试过的(并且失败了):
CASE
WHEN Date(t1.DATE) BETWEEN Date(1/1/2014) and Date(12/31/2014)
THEN (COUNT(t1.DATE))
END
但最终只计算了总日期,而不考虑我之间的陈述。
答案 0 :(得分:3)
假设您正在使用Query Builder,您可以使用以下内容:
我认为您不需要CASE语句,而是使用YEAR()函数计算年份并测试它是否等于2014/2013。对于相等性的测试将返回1/0,其可以总计为每组的总数。确保在查询构建器的GROUP BY部分中包含PrimKey。
sum(year(t1.date)=2014) as Y2014,
sum(year(t2.date)=2013) as Y2013,
我不喜欢这种类型的解决方案,因为它不是动态的,即如果您的年份发生变化,您必须更改代码,并且如果发生这种情况,代码中没有任何内容可以返回错误。更好的解决方案是按年/ PrimKey执行摘要任务,然后使用转置任务获取所需结构中的数据。