我不太明白这个函数是如何工作的,我一直在查看下面的文档,并且我有一些问题。
http://msdn.microsoft.com/en-us/library/bb510624.aspx
因此,我完全理解GROUPING()是如何工作的,但是GROUPING_ID的输出对于我来说是完全不可能理解的,因为它与解释不一样。
例如,我有下面的1和0字符串:010。在文档中,它说它等于2。我还在一本SQL书中读到,每一个字节(最右边) is EQUAL与2的幂次方为字节位置减去1。
那么,(2^2 - 1) + (2^1 -1)+ (2^0 - 1),但是对于每个二进制数,这不是相同的吗?(100/101/110/etc),结果也不是2.
编辑1:书中的解释如下:
另一个用于识别分组集的函数是GROUPING_ID,该函数接受分组列的列表作为输入,并返回一个表示位图的整数。最右边的部分代表最右边的输入。当相应的元素是分组集合的一部分时,位是0,而不是的时候是1。每个位代表2上升到位位置的幂减去1;所以最右边的位代表1,左边的1,然后4,然后8等等。结果整数是表示不属于分组集的元素的值之和,因为它们的位是打开的。这里有一个查询,演示了这个函数的使用。
必须有一个错误,因为一个数字不可能由2^(位置)- 1来计算,这是一个错误吗?我一直在计算2^(位位) *1,输出是正确的。例如,我做了这个
GROUPING_ID(a,b,c),
GROUPING(a),
GROUPING(b),
GROUPING(c)假设我们有以下输出
3, 0, 1, 1所以我们的二进制字符串是011,3是GROUPING_ID函数的输出,如果我们计算字符串的话
2^0 * 1 + 2^1 * 1 + 2^0 *2 = 1 + 2 + 0 = 3这里没有其他的逻辑,我不能用减号来计算,上面的引语是,在MSDN上,更奇怪的定义似乎有点类似于这个定义:
每个GROUPING_ID参数必须是按列表分组的元素。GROUPING_ID ()返回一个整数位图,其最低N位可能被亮起。 lit位指示对应的参数不是给定输出行的分组列。最低阶位对应于参数N,而N-1次低阶位对应于参数1.
发布于 2014-11-07 12:38:19
假设我们有从右到左的二进制数0101
1->(2^0*1)=1
0>(2^1*0)=0
1->(2^2*1)=4
0>(2^3*0)=0
如果我们把所有的结果相加,我们就会得到5个
所以0101(二进制)=5(小数)
https://stackoverflow.com/questions/26800970
复制相似问题