sql表中的变量列名值函数

时间:2010-10-13 20:25:08

标签: sql sql-server

假设我使用sql server跟踪我的所有个人开支,并且我用日期和类别标记所有内容。

这允许我执行诸如每个类别的每月总费用之类的事情,并查看最近几个月的费用,每个类别作为一行,最近几个月作为列。

我所坚持的事实是,我必须将列名称为“最近一个月”,“上个月”和“2个月前”。我真的更愿意为它们命名为“Jan10”,“Feb10”或“Mar09”之类的东西,并让它们每个月自动更新。

计算名称很简单,但我不知道如何让sql server解释公式或连接或类似的任何东西作为列的别名。

对此有何看法?

3 个答案:

答案 0 :(得分:3)

  

我所坚持的事实是,我必须将列名称为“最近一个月”,“上个月”和“2个月前”。我真的更愿意为它们命名为“Jan10”,“Feb10”或“Mar09”之类的东西,并让它们每个月自动更新。

这种方法意味着创建多个列,最终会达到极限。在SQL Server, that's 1,024 for a non-wide and 30,000 for a wide table ...

更好的方法是根据需要存储日期,并在查询中对数据进行分区/分区。因为1月10日将在2009年,2010年,2011年等具有不同的价值......

答案 1 :(得分:1)

在我看来,您尝试以与查看数据相同的方式存储数据。这不是一个很好的方法。我建议如下:

你的桌子应该有必需品,比如说:

Store (This could become its own table, but we can leave it as a string)
Category
Amount Spent
Date

然后,一旦掌握了这些数据,就可以报告。此报告将执行繁重的工作,并且在您不需要硬编码值的意义上将是动态的。以下只是一个例子,我不能保证语法是正确的。

SELECT Store, SUM(CASE WHEN Date > GETDATE() - 14 THEN AmountSpent ELSE 0 END)
FROM YourTable
GROUP BY Store

以上内容将为您提供过去14天内每家商店的所有款项。这个窗口将“滑动”,每次运行它都会回顾两周;没有硬编码。

答案 2 :(得分:0)