具体日期计算sql

时间:2014-05-02 19:22:37

标签: sql excel sql-server-2008 pivot-table

使用SQL 2008 r2并在excel数据透视表中使用我的Q数据(欢乐)!

所以我有一个查询给我这样的结果:(在许多其他结果中,但这是数据减去'噪音'。所以我不能删除/过滤任何数据,只是在新列中添加它):< / p>

    month  user  target   
    1      001    1000
    1      001    1000
    1      002    2000
    1      001    1000
    2      002    2000
    2      002    2000
    3      002    2000
    3      002    2000
    4      002    2000

我想要的是这样的:

    month  user  target  New col
    1      001    1000    1000
    1      001    1000       0
    1      002    2000    2000
    1      001    1000       0
    2      002    2000    2000
    2      001    2000    1000
    3      002    2000    2000
    3      002    2000       0
    3      002    2000       0
    3      001    2000    1000
    4      002    2000    2000
    4      001    1000    1000

所以基本上我希望每个用户的目标只显示新月的第一个实例,然后在每个月的每个实例显示“0”。此查询采用年度目标并将其除以12以达到每月级别。在我的示例中,用户001的目标金额将是“新col”而不是“target”列的总和,因为在计算年度/ 12时它只是将该金额放在有用户记录的位置并总结该列远远超过实际目标。

所以这就是说,每个月,用户001的月目标为1000,而用户002的月目标为2000.这就是我无法总结目标列的原因。

为什么我需要这种格式?因为这些数据正在excel中的数据透视表中与其他数据一起使用,我需要对其进行汇总并在excel中汇总为运行总计。因此,我不想总结“目标列”,而是“新col”,然后当我查看我的支柱上的所有员工时,它总计了这些员工的目标,当我向下钻取个人时,它只显示我个人的目标。

这让我在网上搜索了几天没有任何快乐。如果有人真的想要提供帮助,但对我想要/想要的东西感到困惑,我会在这里更新/编辑任何需要的东西。如果我能解决这个问题,那将是如此巨大!

1 个答案:

答案 0 :(得分:1)

这与你所追求的一致吗?

CREATE TABLE [dbo].[Users](
[month] [int] NOT NULL,
[user] [int] NOT NULL,
[target] [int] NOT NULL
) ON [PRIMARY]

GO

DELETE FROM users

insert into users ([month], [user], [target]) values
(1,001,1000), (1,001,1000),(1,002,2000),(1,001,1000), (2,002,2000), (2,002,2000), 
(3,002, 2000), (3,002,2000), (4, 002, 2000);

With RowAdded AS (
SELECT ROW_NUMBER() OVER( Partition By [user],[month] order by [user]) AS RowNum,
U.*
FROM users U),

Targeted AS (
    SELECT
   RA.[month],
   RA.[user],
   CASE WHEN RowNum = 1 THEN [target]
    ELSE 0 END AS target
   FROM RowAdded RA)

SELECT * FROM Targeted