一个视图的问题求助!

ww176185299 2015-07-29 09:19:25


想实现上述功能请问视图改如何写?我写的视图记录不是重复就是缺少....
...全文
159 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Haytor 2015-07-30
  • 打赏
  • 举报
回复
可以参考一下这个脚本

;WITH Tab1(ID,Nums) AS (
SELECT 'HS001',100
),
Tab2(InDate,ID,Nums) AS(
SELECT '2015-07-24','HS001',40 UNION ALL
SELECT '2015-07-25','HS001',60 UNION ALL
SELECT '2015-07-27','HS001',55 UNION ALL
SELECT '2015-07-29','HS001',100
),
Tab3(OutDate,ID,Nums) AS(
SELECT '2015-07-25','HS001',40 UNION ALL
SELECT '2015-07-26','HS001',60 UNION ALL
SELECT '2015-07-27','HS001',30 UNION ALL
SELECT '2015-07-28','HS001',40
)
SELECT
a.ID,
a.Nums,
bb.Date,
bb.InNums,
bb.OutNum
FROM Tab1 a INNER JOIN
(
SELECT
ISNULL(b.ID,c.ID) AS ID,
ISNULL(b.InDate,c.OutDate) AS [Date],
b.Nums AS InNums,
c.Nums AS OutNum
FROM
Tab2 b
FULL JOIN Tab3 c ON b.ID = c.ID AND b.InDate = c.OutDate
) bb ON bb.ID = a.ID
ORDER BY
bb.Date

ww176185299 2015-07-30
  • 打赏
  • 举报
回复
引用 1 楼 shoppo0505 的回复:
select
a.产品编码
a.数量 as 订单数量
b.入库日期 as 日期
b.数量 as 入库数量
null as 出库数量
from 订单表 a
inner join 入库表 b on a.产品编码 = b.产品编码

union all

select
a.产品编码
a.数量 as 订单数量
b.出库日期 as 日期
null as 入库数量
b.数量 as 出库数量
from 订单表 a
inner join 出库表 b on a.产品编码 = b.产品编码


不好意思,我的示例表没有表述清楚,实际可能会出现同一天既有入库又有出库的情况:
ww176185299 2015-07-30
  • 打赏
  • 举报
回复
引用 4 楼 airsoft 的回复:
可以参考一下这个脚本

;WITH Tab1(ID,Nums) AS (
	SELECT 'HS001',100
),
Tab2(InDate,ID,Nums) AS(
	SELECT '2015-07-24','HS001',40 UNION ALL
	SELECT '2015-07-25','HS001',60 UNION ALL
	SELECT '2015-07-27','HS001',55 UNION ALL
	SELECT '2015-07-29','HS001',100
),
Tab3(OutDate,ID,Nums) AS(
	SELECT '2015-07-25','HS001',40 UNION ALL
	SELECT '2015-07-26','HS001',60 UNION ALL
	SELECT '2015-07-27','HS001',30 UNION ALL
	SELECT '2015-07-28','HS001',40
)
SELECT
	a.ID,
	a.Nums,
	bb.Date,
	bb.InNums,
	bb.OutNum
FROM Tab1 a INNER JOIN 
	(
		SELECT
			ISNULL(b.ID,c.ID) AS ID,
			ISNULL(b.InDate,c.OutDate) AS [Date],
			b.Nums AS InNums,
			c.Nums AS OutNum
		FROM 
			Tab2 b
		FULL JOIN Tab3 c ON b.ID = c.ID AND b.InDate = c.OutDate
	) bb ON bb.ID = a.ID
ORDER BY
	bb.Date

谢谢,代码没有问题,之前别名弄错了。
ww176185299 2015-07-30
  • 打赏
  • 举报
回复
引用 1 楼 shoppo0505 的回复:
select a.产品编码 a.数量 as 订单数量 b.入库日期 as 日期 b.数量 as 入库数量 null as 出库数量 from 订单表 a inner join 入库表 b on a.产品编码 = b.产品编码 union all select a.产品编码 a.数量 as 订单数量 b.出库日期 as 日期 null as 入库数量 b.数量 as 出库数量 from 订单表 a inner join 出库表 b on a.产品编码 = b.产品编码
谢谢回复,在简易表测试结果正确,我之前也尝试过用UNION ALL,但总是出错,好像是列的数量不一致的原因。 我再在实际应用中的操作的试试,不懂的还请多多指教!谢谢!
yenbsher 2015-07-30
  • 打赏
  • 举报
回复


 select
a.产品编码,
a.数量 as 订单数量,
b.日期,
sum(b.入库数量) as 入库数量,
sum(b.出库数量) as 出库数量 
from 订单表 a ,( 
select 入库日期 as 日期,产品编码,数量 as 入库数量,0 as 出库数量 from 入库表
union all
select 出库日期 as 日期,产品编码,0 as 入库数量,数量 as 出库数量 from 出库表)b
where a.产品编码=b.产品编码
group by a.产品编码,a.数量,b.日期

shoppo0505 2015-07-30
  • 打赏
  • 举报
回复
引用 3 楼 ww176185299 的回复:
[quote=引用 1 楼 shoppo0505 的回复:] select a.产品编码 a.数量 as 订单数量 b.入库日期 as 日期 b.数量 as 入库数量 null as 出库数量 from 订单表 a inner join 入库表 b on a.产品编码 = b.产品编码 union all select a.产品编码 a.数量 as 订单数量 b.出库日期 as 日期 null as 入库数量 b.数量 as 出库数量 from 订单表 a inner join 出库表 b on a.产品编码 = b.产品编码
不好意思,我的示例表没有表述清楚,实际可能会出现同一天既有入库又有出库的情况: [/quote] 基本也是一样的错作,在前面的语句后面,group by 产品编码, 订单数量,日期, 前面sum出库,入库数量就好
ww176185299 2015-07-30
  • 打赏
  • 举报
回复
我感觉这个嵌套的思路应该是对的,但不知道哪里出错了。
ww176185299 2015-07-30
  • 打赏
  • 举报
回复
引用 4 楼 airsoft 的回复:
可以参考一下这个脚本

;WITH Tab1(ID,Nums) AS (
SELECT 'HS001',100
),
Tab2(InDate,ID,Nums) AS(
SELECT '2015-07-24','HS001',40 UNION ALL
SELECT '2015-07-25','HS001',60 UNION ALL
SELECT '2015-07-27','HS001',55 UNION ALL
SELECT '2015-07-29','HS001',100
),
Tab3(OutDate,ID,Nums) AS(
SELECT '2015-07-25','HS001',40 UNION ALL
SELECT '2015-07-26','HS001',60 UNION ALL
SELECT '2015-07-27','HS001',30 UNION ALL
SELECT '2015-07-28','HS001',40
)
SELECT
a.ID,
a.Nums,
bb.Date,
bb.InNums,
bb.OutNum
FROM Tab1 a INNER JOIN
(
SELECT
ISNULL(b.ID,c.ID) AS ID,
ISNULL(b.InDate,c.OutDate) AS [Date],
b.Nums AS InNums,
c.Nums AS OutNum
FROM
Tab2 b
FULL JOIN Tab3 c ON b.ID = c.ID AND b.InDate = c.OutDate
) bb ON bb.ID = a.ID
ORDER BY
bb.Date



你好,谢谢你的回复!
我将这一段
SELECT
ISNULL(b.ID,c.ID) AS ID,
ISNULL(b.InDate,c.OutDate) AS [Date],
b.Nums AS InNums,
c.Nums AS OutNum
FROM
Tab2 b
FULL JOIN Tab3 c ON b.ID = c.ID AND b.InDate = c.OutDate
里的表名、字段名替换为我的表名、字段名后可以的到结果,但套上外面的SELECT后,也就是执行:
SELECT
a.ID,
a.Nums,
bb.Date,
bb.InNums,
bb.OutNum
FROM Tab1 a INNER JOIN
(
SELECT
ISNULL(b.ID,c.ID) AS ID,
ISNULL(b.InDate,c.OutDate) AS [Date],
b.Nums AS InNums,
c.Nums AS OutNum
FROM
Tab2 b
FULL JOIN Tab3 c ON b.ID = c.ID AND b.InDate = c.OutDate
) bb ON bb.ID = a.ID
提示:

shoppo0505 2015-07-30
  • 打赏
  • 举报
回复
select a.产品编码 a.数量 as 订单数量 b.入库日期 as 日期 b.数量 as 入库数量 null as 出库数量 from 订单表 a inner join 入库表 b on a.产品编码 = b.产品编码 union all select a.产品编码 a.数量 as 订单数量 b.出库日期 as 日期 null as 入库数量 b.数量 as 出库数量 from 订单表 a inner join 出库表 b on a.产品编码 = b.产品编码

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧