文档章节

sql已经完成,生成表

街头要饭
 街头要饭
发布于 2015/05/08 15:11
字数 323
阅读 217
收藏 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
数据库优化工具--GXDatabaseUtils

GXDatabaseUtils 能简化数据库操作: 1. 简化了表的创建,通过对象名自动生成表结构; 2. 简化了sql语句的生成,根据参数自动生成sql语句; 3. 简化了sqlite的操作,通过接口实现CRUD操作,简...

petsatan
2014/10/16
658
0

没有更多内容

加载失败,请刷新页面

加载更多

soapui的安装使用

https://blog.csdn.net/weiqing723/article/details/78865734

暗中观察
17分钟前
0
0
ACID学习记录

ACID的C即一致性,打比方,多个线程并发执行转账业务:A转给B一块钱,无论成功与否(A+B)的总额是不会变的。事务执行前与执行后数据内在的逻辑始终是成立的。这里就是转账前与转账后两人存款的...

wmzsonic
32分钟前
0
0
手写tomcat+servlet

写程序一定要有思路,思路很重要! 一、我们分两步第一步先实现手写tomcat,第二部写servlet 所用技术: 1、soket通信 IO流 2、http请求与相应 3、解析xml 4、java反射技术 导入所需要的jar...

jason_kiss
55分钟前
1
0
Beetl模板的基础用法 【变量、循环、条件】---《Beetl视频课程》(2)

本期视频做了一个博客的首页列表; 内容简介:springboot 集成 beetlsql;使用for循环,使用if控制语句,使用虚拟属性,定义变量等等 一起学beetl目录:https://my.oschina.net/u/1590490?ta...

Gavin-King
今天
1
0
各种视频监控上墙方案的比较

方案1、一使用 DVR 、NVR 直接显示上墙 不得不说,这种办法是成本最低廉的,但这里有不少限制: 无法实现分散点的集中上墙。譬如连锁经营的酒店,如果我在总部建立一个集中上墙的环境,这个就...

PeakFang-BOK
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部