2014-05-02 100 views
0

使用SQL 2008 R2和在Excel中使用我的Q数据数据透视图(喜悦)!所以我不能删除/过滤任何数据,只能添加到新的列中:日期具体计算sql

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的目标金额将是“新上限”而不是“目标”列的总和,因为计算年度/ 12时,它只是将该金额存入任何存在用户记录的位置并汇总该列远远超过实际目标。

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

为什么我需要这种格式?因为这些数据在其他数据的excel中被用在数据透视图中,我需要将它汇总并汇总为excel中的总计。所以我不想总结'目标专栏',而是总结'新专栏',然后当我看到所有员工在我的关键点上时,它总计了这些员工的目标,当我深入到个人,它只显示我个人的目标。

这让我难以忍受的搜索遍布网路的日子,没有快乐。如果有人真的试图帮助我,但是我想问/想要让我困惑,我会在这里更新/编辑任何需要的东西。这将是如此巨大,如果我能得到这个解决!

+0

什么专栏告诉你,如果“实例”是第一个? – Lamak

+0

如果您的约束条件允许使用临时表,您可能会发现在两个或更多遍中执行操作更容易:首先通过SELECT DISTINCT month,user,target,second pass来添加其他行,例如 – Angst

+0

所以我在想Row_Count()或者我有一个唯一的col,我们可以调用ROWID,它是增量式的,也可以使用。我可以使用与't1'形式的临时表作为(选择.....) – user3486773

回答

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 
+0

现在尝试一切。当我把它翻译成我的工作Q(我不能发布)时,请忍受我的问题 – user3486773

+0

当然,作为一个附注,在这些问题中添加sql create和seed语句将为您带来更好的结果,这样人们可以轻松地获得帮助而不是通过创建表格,添加数据等努力。 –

+0

我想补充一点,我没有采用这种逐字记录,但是选择语句中的内容能够被修改以使其起作用。我会用我使用的代码编辑这个评论,但史蒂夫杰克逊,不能感谢你足够的 – user3486773