【发布时间】:2014-05-02 19:22:37
【问题描述】:
使用 SQL 2008 r2 并在 excel 数据透视图中使用我的 Q 数据(快乐)!
所以我有一个查询给我这样的结果:(在许多其他结果中,但这是减去“噪音”的数据。所以我不能删除/过滤任何数据,只能在新列中添加):
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 中的运行总计。所以我不想总结“目标列”而是“新列”,然后当我查看我的枢轴上的所有员工时,它汇总了这些员工的目标,当我深入到个人时,它只显示我那个人的目标。
这让我在网上搜索了好几天都没有乐趣。如果有人真的想提供帮助,但对我的要求/想要的东西感到困惑,我将在这里更新/编辑任何需要的东西。如果我能解决这个问题,那就太棒了!!!
【问题讨论】:
-
如果“实例”是第一个,哪一列会告诉你?
-
如果您的约束允许使用临时表,您可能会发现在 2 次或更多次传递中更容易:第一次传递 SELECT DISTINCT 月份、用户、目标,第二次传递以添加其他行,例如
-
所以我在想 Row_Count() 或者我有一个独特的 col,我们可以调用 ROWID,它是增量的,也可以使用。我可以使用 with 't1' as(select.....) 形式的临时表
-
我已经在 2 个 'tables' 中使用 'with as ()' 所以添加更多不是什么大问题,这只是我的代码只为所有用户而不是每个用户提供月份的第一个实例.
-
类似这样的东西。
// first pass INSERT INTO temp_t1 SELECT month,user, target, 0 from <other> // we'll have one row too many when we add the row with the target, so remove one DELETE from temp_t1 where ROW_ID in (select Min(row_id) ... grouped by month,user.... // third pass : put in the row with the true target INSERT INTO temp_t1 SELECT DISTINCT month,user, target, target from <other>;
标签: sql excel sql-server-2008 pivot-table