一些背景:
我有一个样本人口数据文件。数据文件中的每条记录都有一个频率权重(FIELD NAME: wgt
),指示需要复制多少次记录才能获得真正的总体。数据在 Microsoft SQL 2008 R2 中设置。生成权重的频率分布以查看某种特定类型的记录是否以任何方式过度表示通常是一种很好的做法 - 从而帮助识别趋势/异常值。这个任务在 SQL 中很简单:
SELECT wgt, COUNT(*) FROM tablename
GROUP BY wgt
Run Code Online (Sandbox Code Playgroud)
挑战: 我想根据其他值进一步分离这些频率。假设不同家庭规模的权重频率分布。实现此目的的一种方法是在上述语句中使用不同的 where 条件:
SELECT wgt, COUNT(*) FROM tablename
WHERE household_size=x --x being the desired segment
GROUP BY wgt
Run Code Online (Sandbox Code Playgroud)
但是有没有办法用所有不同的段创建一个表?像这样的东西:
WGT | SIZE1 SIZE2 SIZE3 SIZE4
--------------------------------------------------
1 | 2,034 1,025 502 234
2 | 215 253 142 23
3 | 31 25 21 34
4 | 7 1 3 7
5 | 5 NULL 2 5
6 …
Run Code Online (Sandbox Code Playgroud) 我有一张很大的桌子。我想分区它,但我不能。
数据库大小:1TB,可用空间200GB
桌子:
为了对其进行分区,我需要创建一个聚集索引。但是创建分区需要与表相同大小的可用空间,而我没有额外的600GB。
有什么选项可以让我对这个表进行分区吗?
编辑 1:
我试过将数据复制到单独的表中。
但是,当我尝试DELETE
(或INSERT
)将 1 天的数据放入另一个表时,出现错误,该事务日志已满并且我的事务正在回滚。我的事务日志大约是 20 GB,我不能让它更大。