Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于列值拆分行_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 基于列值拆分行

Sql 基于列值拆分行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有下表输出-我有: Account No Description Seg1 Seg2 Seg3 Budget PeriodBalance 000-1120-00 Cash 000 1120 00 $1,000.00 $2,000.00 000-1130-00 Asset 000 1130 00 $1,500.00 $3,000.00

我有下表输出-我有:

Account No     Description    Seg1    Seg2    Seg3      Budget     PeriodBalance
000-1120-00    Cash            000    1120     00       $1,000.00    $2,000.00
000-1130-00    Asset           000    1130     00       $1,500.00    $3,000.00 
我想要的是:

Account No    Description   Seg1    Seg2    Seg3    Budget      PeriodBalance
000-1120-01   Cash           000    1120    01      $500.00      $1,000.00 
000-1120-02   Cash           000    1120    02      $500.00      $1,000.00
000-1130-00   Asset          000    1130    00    $1,500.00      $3,000.00 
在这里,如果Seg2等于1120,那么我想将其分为两个账户,账户编号为01,02代替段3中的00,如上文“我想要什么”部分所示

declare @period int; 
declare @year int

Select @period = 12, @year = 2017

Select 
    rtrim(c.Actnumbr_1) +'-'+ rtrim(c.Actnumbr_2)+ '-'+ rtrim(c.Actnumbr_3) as ACTNUMST, 

    c.ACTDESCR, 
    c.ACTNUMBR_1, 
    c.ACTNUMBR_2, 
    c.ACTNUMBR_3,  
    sum(a.PERDBLNC) as Period_Balance,
    b.BUDGETAMT 
from GL00100 c
left outer join GL11110 a on c.ACTINDX = a.ACTINDX
Left outer join 
    (Select 
        actindx, 
        sum(budgetamt) as budgetamt 
    from GL00201  
            where BUDGETID = 'budget2017' 
            and periodid <= @period group by actindx) b 
    on c.ACTINDX = b.ACTINDX
where 
    a.PERIODID <= @period and 
    a.year1 = @year 
    --and c.ACTINDX in ('18','211') 
group by 
    c.ACTDESCR, c.ACTNUMBR_1, c.ACTNUMBR_2, c.ACTNUMBR_3, a.year1,c.ACTINDX,b.BUDGETAMT

我不知道第二个查询是关于什么的,但使用以下示例数据:

IF OBJECT_ID('tempdb..#yourtable') IS NOT NULL DROP TABLE #yourTable;
CREATE TABLE #yourtable
(
  [Account No]  varchar(20),
  [Description] varchar(20),
  Seg1          char(3),
  Seg2          smallint,
  Seg3          varchar(5),
  Budget        money,
  PeriodBalance money
);

INSERT #yourTable
VALUES  ('000-1120-00', 'Cash', '000', 1120, '00', $1000.00, $2000.00),
        ('000-1130-00', 'Asset','000', 1130, '00', $1500.00, $3000.00);
您可以这样做:

SELECT 
  [Account No]  = SUBSTRING([Account No], 1, CHARINDEX('-', [Account No], CHARINDEX('-', [Account No])+1))+ordinal,
  [Description], 
  Seg1, Seg2, 
  Seg3          = ordinal, 
  Budget        = Budget / 2, 
  PeriodBalance = PeriodBalance / 2
FROM @yourTable
CROSS JOIN (VALUES ('01'), ('02')) split(ordinal)
WHERE Seg2 = 1120
UNION ALL 
SELECT [Account No], [Description], Seg1, Seg2, Seg3, Budget, PeriodBalance
FROM @yourTable
WHERE Seg2 <> 1120;

没有人能回答这个简单的问题,这不是很奇怪吗。
Account No             Description          Seg1 Seg2   Seg3  Budget                PeriodBalance
---------------------- -------------------- ---- ------ ----- --------------------- ---------------------
000-1120-01            Cash                 000  1120   01    500.00                1000.00
000-1120-02            Cash                 000  1120   02    500.00                1000.00
000-1130-00            Asset                000  1130   00    1500.00               3000.00