需要将特定行的列值添加到具有相同层次结构的另一列

问题描述 投票:0回答:1

输入:

身份证 代码 描述 七月 八月
1 1000 进项税
2 1 越谷 65755 48910
3 2 宿舍 15994 25107
4 0 商业 23873 23813
5 总计 105622 97830
6 2014 渲染帐户
7 1 世界花园 65755 48910
8 0 商业 23873 23813
9 总计 89628 72723

输出:

代码 描述 财产 七月 八月
1000 进项税 越谷 65755 48910
1000 进项税 宿舍 15994 25107
2014 渲染帐户 世界花园 65755 48910

在 SQL Server 中,我有像上面提到的这样的输入。
我想要一个如上所示的输出结果。
如果有一个代码是 0 那么我们必须忽略这一行并且描述是 Total 那么我们也必须忽略这一行。
假设代码的数字大于三个,则描述与输出中给出的相同。但需要添加额外的列,即属性,属性名称是从描述的下一行获取的,但我们必须指定一个条件,其中代码介于 1 到 2、1 到 3、1 到 4 等之间。

sql-server
1个回答
0
投票

这是使用窗口函数

first_value() over()
sum() over()

的一种选择

注意:这假设

CODE
string
而不是
INT

示例

with cte as (
Select NCode        = first_value(Code)        over (Partition by Grp Order by ID)
      ,NDescription = first_value(Description) over (Partition by Grp Order by ID)
      ,*
 From  (
        Select *
              ,Grp = sum(case when len(Code)>=3 then 1 else 0 end) over (order by ID)
         From  YourTable
       ) A
)
Select Code        = NCode
      ,Description = NDescription
      ,Property    = Description
      ,July
      ,August
 From  cte
 Where len(Code)<3 and Code<>'0'

结果

Code    Description     Property        July    August
1000    Input Taxes     Koshigaya       65755   48910
1000    Input Taxes     Dormitory       15994   25107
2014    Render Account  World Garden    65755   48910
© www.soinside.com 2019 - 2024. All rights reserved.