我有一个表如下。使用重复列计数
ClientID | FileCount | LinkNumber | ActualFileCount |
----------|-----------|------------|-----------------|
1 | 1 | 0 | 1 |
----------|-----------|------------|-----------------|
2 | 1 | 0 | 1 |
----------|-----------|------------|-----------------|
3 | 2 | 0 | 2 |
----------|-----------|------------|-----------------|
4 | 1 | 123 | 1 |
----------|-----------|------------|-----------------|
5 | 1 | 123 | 0 |
----------|-----------|------------|-----------------|
6 | 2 | 456 | 2 |
----------|-----------|------------|-----------------|
7 | 2 | 456 | 0 |
----------|-----------|------------|-----------------|
8 | 2 | 456 | 0 |
----------|-----------|------------|-----------------|
9 | 1 | 789 | 1 |
----------|-----------|------------|-----------------|
10 | 1 | 789 | 0 |
基本上,如果LinkNumber为0,则将FileCount列复制到ActualFileCount列中。但是,如果LinkNumber不是0,那么ActualFileCount必须只是与该LinkNumber相关的单个值。
例如ClientID 4和5,他们是夫妻,所以我们把他们俩连起来。系统给它们每个FileCount 1.但是,因为它们是链接,所以两者都只有一个ActualFileCount(两者都只有1个“物理”文件)。
我使用的语法如下练成我(使用客户端ID 3和客户端Id 4为例)
If (LinkNumber = 0 then FileCount else
(If (LinkNumber for ClientID 4 = LinkNumber for ClientID 3 then 0 else FileCount)
当我把它翻译到SQL Server 2012,这是行不通的。
select ClientID, file_count, LinkNumber,
If LinkNumber = 0 then file_count
else If LinkNumber + 1 = LinkNumber Then 0 else FileCount
end
as ActualFileCount
from TableA
order by LinkNumber asc
谢谢你们的帮助。
我猜你可能会寻找当linknumber = 0或ROW_NUMBER()通过像'情况下在(分区linknumber order by clientid)= 1 then file_count else 0 end'? – ZLK