2

如果在类似于下面的数据集上,我希望能够执行相当于计数的操作。我在这里找到了类似的东西,但我不确定如何将其翻译成企业指南。我想创建几个新列来计算每个主键的日期出现次数,例如:

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

但这最终只是计算了日期的总出现次数,而不考虑我的 between 声明。

4

1 回答 1

3

假设您使用的是查询生成器,您可以使用如下内容:

我认为您不需要 CASE 语句,而是使用 YEAR() 函数来计算年份并测试它是否等于 2014/2013。相等性测试将返回一个 1/0,它可以与每组的总数相加。确保在查询生成器的 GROUP BY 部分中包含 PrimKey。

sum(year(t1.date)=2014) as Y2014,
sum(year(t2.date)=2013) as Y2013,

我不喜欢这种类型的解决方案,因为它不是动态的,即如果您的年份发生变化,您必须更改您的代码,如果发生这种情况,代码中没有任何内容可以返回错误。更好的解决方案是按 Year/PrimKey 执行摘要任务,然后使用转置任务获取所需结构中的数据。

于 2015-02-06T16:31:54.797 回答