文档章节

sql已经完成,生成表

街头要饭
 街头要饭
发布于 2015/05/08 15:11
字数 323
阅读 216
收藏 1
 



create table tableone
(
    TableoneID varchar(50),
    orderNo varchar(20),
    Ordernumber varchar(20),
    NUB1 int
) 
insert into tableone values
(NEWID()       ,'S001',    'X3600000001',    2),
(NEWID()          ,'S001',    'X3600000002',    2),
( NEWID()           ,'S002',    'X3600000003',    6),
( NEWID()           ,'S002',    'X3600000004',    6),
(NEWID()           ,'S003',    'X3600000005',    6),
(NEWID()           ,'S003',    'X3600000006',    8)

create table  tabletwo
(
    TabletwoID varchar(50),
    orderNo varchar(20),
    Deliveryitem varchar(20),
    NUB2 int
)
insert into tabletwo values
(NEWID(),           'S001',    'D3600000001',    4),
(NEWID(),           'S002',    'D3600000002',    7),
(NEWID(),           'S003',    'D3600000003',    8),
(NEWID(),            'S003',    'D3600000004',    4),
(NEWID(),            'S003',    'D3600000005',    2);

-- SQL Server
WITH /*
Table1(TableoneID,orderNo,Ordernumber,NUB1)AS(
	SELECT NEWID(),'S001','X3600000001',2 UNION ALL
	SELECT NEWID(),'S001','X3600000002',2 UNION ALL
	SELECT NEWID(),'S002','X3600000003',6 UNION ALL
	SELECT NEWID(),'S002','X3600000004',6 UNION ALL
	SELECT NEWID(),'S003','X3600000005',6 UNION ALL
	SELECT NEWID(),'S003','X3600000006',8
)
	,Table2(TabletwoID,orderNo,Deliveryitem,NUB2)AS(
	SELECT NEWID(),'S001','D3600000001',4 UNION ALL
	SELECT NEWID(),'S002','D3600000002',7 UNION ALL
	SELECT NEWID(),'S003','D3600000003',8 UNION ALL
	SELECT NEWID(),'S003','D3600000004',4 UNION ALL
	SELECT NEWID(),'S003','D3600000005',2
), */
t1 AS (
    SELECT *,
           ROW_NUMBER()OVER(PARTITION BY orderNo ORDER BY orderNumber) rn
      FROM tableone
)
,t2 AS (
    SELECT *,
           ROW_NUMBER()OVER(PARTITION BY orderNo ORDER BY Deliveryitem) rn
      FROM tabletwo
)
,t3 AS (
    SELECT ISNULL(t1.orderNo,t2.orderNo) orderNo,
           ISNULL(t1.rn,t2.rn) rn,
           t1.Ordernumber,
           t1.NUB1,
           t2.Deliveryitem,
           t2.NUB2
      FROM t1
 FULL JOIN t2
        ON t1.orderNo = t2.OrderNo
       AND t1.rn = t2.rn
)
    SELECT NEWID() MergeTableID,
           CASE WHEN rn=1 THEN orderNo ELSE NULL END orderNo,
           Ordernumber,
           NUB1,
           Deliveryitem,
           NUB2
      FROM t3
  ORDER BY t3.orderNo, rn


以上内容在sql2008中实现,为了效率就没用游标

© 著作权归作者所有

共有 人打赏支持
街头要饭
粉丝 2
博文 25
码字总数 14470
作品 0
松江
程序员
加载中

评论(13)

街头要饭
街头要饭

引用来自“霍啸林”的评论

通过视图或临时表给sheet1和sheet2各加一列SeqNo,
ROW_NUMBER() OVER(PARTITION BY 订单编号 ORDER BY 货号,数量) AS SeqNo
假定加了SeqNo列的两个sheet分别为s1和s2
SELECT ... FROM s1 FULL OUTER JOIN s2 ON
(s1.订单编号 = s2.订单编号 AND s1.SeqNo = s2.SeqNo)
我用的是SqlServer,你若是其他db,自己看着改吧
具体写法 理论的我也不懂,我不是做sql了;受累受累
霍啸林
霍啸林
通过视图或临时表给sheet1和sheet2各加一列SeqNo,
ROW_NUMBER() OVER(PARTITION BY 订单编号 ORDER BY 货号,数量) AS SeqNo
假定加了SeqNo列的两个sheet分别为s1和s2
SELECT ... FROM s1 FULL OUTER JOIN s2 ON
(s1.订单编号 = s2.订单编号 AND s1.SeqNo = s2.SeqNo)
我用的是SqlServer,你若是其他db,自己看着改吧
街头要饭
街头要饭

引用来自“霍啸林”的评论

有点挑战性16
你试试?
霍啸林
霍啸林
有点挑战性16
街头要饭
街头要饭

引用来自“zhipu”的评论

  --创建临时表sheet3,表列如第三个表格

  DECLARE Cur CURSOR FOR
  --查询sheet2 得到订单编号
  OPEN Cur
  FETCH NEXT FROM Cur INTO 订单编号
  WHILE @@FETCH_STATUS = 0
  BEGIN
    -- BEGIN
    --根据订单编号查询sheet1
    --插入到临时表sheet3

    FETCH NEXT FROM Cur INTO 订单编号
  END
  CLOSE Cur
  DEALLOCATE Cur

  --查询sheet3
  DROP TABLE sheet3

  --ps 数据量大的话,用游标效率很低
好像不给力啊,能给出具体写法吗?
街头要饭
街头要饭

引用来自“zhipu”的评论

  --创建临时表sheet3,表列如第三个表格

  DECLARE Cur CURSOR FOR
  --查询sheet 得到订单编号
  OPEN Cur
  FETCH NEXT FROM Cur INTO 订单编号
  WHILE @@FETCH_STATUS = 0
  BEGIN
    -- BEGIN
    --根据订单编号查询sheet1
    --插入到临时表sheet3

    FETCH NEXT FROM Cur INTO 订单编号
  END
  CLOSE Cur
  DEALLOCATE Cur

  --查询sheet3
  DROP TABLE sheet3

  --ps 数据量大的话,用游标效率很低
我试试
netdiyer
netdiyer
  --创建临时表sheet3,表列如第三个表格

  DECLARE Cur CURSOR FOR
  --查询sheet2 得到订单编号
  OPEN Cur
  FETCH NEXT FROM Cur INTO 订单编号
  WHILE @@FETCH_STATUS = 0
  BEGIN
    -- BEGIN
    --根据订单编号查询sheet1
    --插入到临时表sheet3

    FETCH NEXT FROM Cur INTO 订单编号
  END
  CLOSE Cur
  DEALLOCATE Cur

  --查询sheet3
  DROP TABLE sheet3

  --ps 数据量大的话,用游标效率很低
netdiyer
netdiyer
  --创建临时表sheet3,表列如第三个表格

  DECLARE Cur CURSOR FOR
  --查询sheet 得到订单编号
  OPEN Cur
  FETCH NEXT FROM Cur INTO 订单编号
  WHILE @@FETCH_STATUS = 0
  BEGIN
    -- BEGIN
    --根据订单编号查询sheet1
    --插入到临时表sheet3

    FETCH NEXT FROM Cur INTO 订单编号
  END
  CLOSE Cur
  DEALLOCATE Cur

  --查询sheet3
  DROP TABLE sheet3

  --ps 数据量大的话,用游标效率很低
街头要饭
街头要饭

引用来自“开源中国首席问题男”的评论

引用来自“街头要饭”的评论

引用来自“开源中国首席问题男”的评论

select * from sheet1 left join sheet2 on sheet1.订单编号=sheet2.订单编号

我试过了 不行

请问报错报什么?

@开源中国首席问题男 看到了吗
街头要饭
街头要饭

引用来自“开源中国首席问题男”的评论

引用来自“街头要饭”的评论

引用来自“开源中国首席问题男”的评论

select * from sheet1 left join sheet2 on sheet1.订单编号=sheet2.订单编号

我试过了 不行

请问报错报什么?

不报错 达不到要求,我把执行结果也给你看看吧待会哈
(喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的CREATE语句

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/9469661 (喷血分享)利用.NET生成数据库表的创建脚本,类似SqlServer编写表的C...

rdiframework
2013/07/25
0
0
Lemur开源/lemur-generation

lemur-generation 思考业务,代码它写 Gen是我构思了挺久的一个代码生成项目,之前零零散散也写了不少代码生成,但是很多都不太理想不能够满足通用性和特殊定制性的需求,每次生成出来还要改一部...

Lemur开源
2017/10/30
0
0
DBGenerator:获取PO注解信息生成表sql

开发过程中,常常创建了PO之后,还要去数据库里创建对应的表,相似的过程,却要做两次,有没有感觉很麻烦?使用Hibernate可以生成表,还要去配置,而且无法得到表创建sql,于是 DBGenerator ...

晓叹星沉
2016/08/16
2.5K
17
由代码生成数据库结构,保障设计正常传递到实现

我们常常使用代码生成工具来生成表结构。为什么不试试从代码来生成数据库表结构呢? 这个观点有些匪夷所思,但是熟悉Hibernate的同志应该有所体会。Hibernate有一个功能,叫做hbm2ddl,在系统...

土豆饼
2016/06/16
1K
14
和lock一起学beego 博客系统开发为例(二)

接着上篇来写《和lock一起学beego 博客系统开发为例(一)》 这篇主要完成以下事项: 1.beego框架,项目的建立 2. 表数据的设计 3. 模型的建立 (这篇在公司里写的,用的是win机器) 一、bee...

lock-li
2016/06/14
764
0

没有更多内容

加载失败,请刷新页面

加载更多

docker run 创建一个新的容器并运行一个命令

docker run常用命令 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 1.OPTIONS说明 -t:为容器重新分配一个伪输入终端,通常与 -i 同时使...

lwenhao
13分钟前
1
0
安装Win出现无法创建新的分区也找不到现有的分区解决方案

无法创建新的分区也找不到现有的分区 ### 首先在安装界面按下 Shift+F10### 在出现的CMD界面输入: diskpart 进入磁盘管理工具diskpart### 可以输入 : list disk 查看磁盘列表l...

Kxvz
16分钟前
1
0
关于 @ngrx/Store 下 obj 的扩展问题

昨天做 task 的时候,遇到了一个问题。 TypeError: can't define property "x": "obj" is not extensible 而我的代码是 public txTiles: Array<TransactionFilterTile>; constructor(priv......

IrisHuang
18分钟前
1
0
presto内存管理及调优

内存池 Presto有三种内存池,分别为GENERAL_POOL、RESERVED_POOL、SYSTEM_POOL。这三个内存池占用的内存大小是由下面算法进行分配的: builder.put(RESERVED_POOL, new MemoryPool(RESERVED...

张欢19933
18分钟前
1
0
Mysql5.7服务版安装

步骤1: 勾选同意协议 步骤2:选择Server only模式 步骤3:选择安装目录 步骤4:执行文件 步骤5:端口号与用户配置 步骤6:选择标准系统用户 Finish后,安装完成。...

lyle_luo
19分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部