zoukankan      html  css  js  c++  java
  • SQL 关键字 With


    Create TABLE tab (CurNum VARCHAR(10),PreNum VARCHAR(10))
    INSERT INTO tab
    SELECT '1', Null  UNION ALL
    SELECT '2', '1' UNION ALL 
    SELECT '3', '2'  UNION ALL
    SELECT '4', '1'  UNION ALL
    SELECT '5', Null

    select * from tab
     SELECT CurNum,PreNum,path=CAST(CurNum AS VARCHAR(100))  FROM tab WHERE PreNum IS NULL
     
    ;WITH cte AS
    (
     SELECT CurNum,PreNum,path=CAST(CurNum AS VARCHAR(100))  FROM tab WHERE PreNum IS NULL
     UNION ALL
     SELECT t.CurNum,t.PreNum,path=CAST(t.CurNum+','+c.path AS VARCHAR(100)) FROM tab t INNER JOIN cte c ON t.PreNum=c.CurNum
    )
    SELECT CurNum,path FROM cte ORDER BY CurNum
    /*
    CurNum     path
    ---------- ----------
    1          1
    2          2,1
    3          3,2,1
    4          4,1
    5          5

    (5 行受影响)
    */

    SELECT CurNum,PreNum,path=CAST(CurNum AS VARCHAR(100))  FROM tab WHERE PreNum IS NULL

     SELECT t.CurNum,t.PreNum,path=CAST(t.CurNum+','+c.path AS VARCHAR(100)) FROM tab t INNER JOIN #Temp c ON t.PreNum=c.CurNum

    ---------------------------------


    if object_id('AlbeeTest.dbo.A') is not null drop table A
    -- 创建数据表
    create table A
    (
    id int,
    name char(5),
    cqye int
    )
    go
    --插入测试数据
    insert into A select 1,'张三',10
    union all select 2,'李四',55
    go

    if object_id('AlbeeTest.dbo.B') is not null drop table B
    -- 创建数据表
    create table B
    (
    id int,
    name char(5),
    zje int,
    jse int,
    time char(10)
    )
    go
    --插入测试数据
    insert into B select 1,'张三',10,3,'2010-8-10'
    union all select 2,'张三',20,7,'2010-8-11'
    union all select 3,'张三',8,2,'2010-8-12'
    union all select 4,'张三',6,15,'2010-8-13'
    union all select 5,'李四',9,20,'2010-8-10'
    union all select 6,'李四',15,9,'2010-8-11'
    go
    --代码实现
    select * from A
    select * from B
    select b.id,b.name,cqye,zje,jse,cqye+zje-jse as hj,b.time
      from A a,B b,(select name,min(time) as time from B group by name)ttt
      where a.name=b.name and b.name=ttt.name and b.time=ttt.time

    ;with t as(
     select b.id,b.name,cqye,zje,jse,cqye+zje-jse as hj,b.time
      from A a,B b,(select name,min(time) as time from B group by name)ttt
      where a.name=b.name and b.name=ttt.name and b.time=ttt.time
     union all
     select b.id,b.name,t.hj as cqye,b.zje,b.jse,t.hj+b.zje-b.jse as hj,b.time
      from t join B b on t.name=b.name and t.id=b.id-1
    )
    select * from t order by id

    /*测试结果

    id name cqye zje jse hj time
    --------------------------------------------------------------
    1 张三  10 10 3 17 2010-8-10
    2 张三  17 20 7 30 2010-8-11
    3 张三  30 8 2 36 2010-8-12
    4 张三  36 6 15 27 2010-8-13
    5 李四  55 9 20 44 2010-8-10
    6 李四  44 15 9 50 2010-8-11

    (6行受影响)
    */

  • 相关阅读:
    一些可以参考的常用工具库类整理
    Java(Android)线程池 总结
    JAVA泛型
    设计模式总结
    原型模式
    工厂模式与抽象工厂模式
    组合模式
    适配器模式
    建造者模式
    外观模式
  • 原文地址:https://www.cnblogs.com/fighting-from-now/p/3570084.html
Copyright © 2011-2022 走看看