sql为题,路过的看下,谢谢~~~~~~

zhangsuyunpk521 2010-11-07 06:23:24
表A:
时间 产品名 数量 价格 贵宾编号
2010-07-14 00:00:00 CKJ 1.0 308.69999999999999 031010001280
2010-07-14 00:00:00 CKJ 1.0 245.69999999999999 031010001280
2010-06-26 00:00:00 CKJ 1.0 351.0 031010001280
2010-06-26 00:00:00 CKJ -1.0 -351.0 031010001280
2010-06-26 00:00:00 CKJ 1.0 351.0 031010001280
2010-06-26 00:00:00 CKJ 1.0 283.5 031010001280
2010-05-21 00:00:00 CKJ 1.0 1071.0 031010001280
2010-05-21 00:00:00 CKJ 1.0 531.0 031010001280
表B:
时间 产品名 数量 价格 贵宾编号
09-23-2010 00:00:00 CKJ 2.0 6732.0 031010001280
07-14-2010 00:00:00 CKJ 2.0 554.39999999999998 031010001280
06-26-2010 00:00:00 CKJ 2.0 634.5 031010001280
05-21-2010 00:00:00 CKJ 2.0 1602.0 031010001280
问题
比如2010-07-14 00:00:00这个时间买了2次产品,但是表B的把这2次加在一起了,我如何删除表B里面2010-07-14 00:00:00这一天的记录,还有2010-06-26 00:00:00也是,就是只要表B里面是把表A里面同一天的数据加起来的话就把表B里面的数据删除,高手指导下看有什么办法,谢谢~~~~
...全文
162 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
HSBOY86 2010-11-09
  • 打赏
  • 举报
回复
create table #t1
(
times datetime,
names nvarchar(50),
num int,
moneys money,
idno nvarchar(50)
)
insert into #t1
select '2010-07-14 00:00:00','CKJ',1,308.69999999999999,'031010001280' union all
select '2010-07-14 00:00:00','CKJ',1,245.69999999999999,'031010001280' union all
select '2010-06-26 00:00:00','CKJ',1,351.0,'031010001280' union all
select '2010-06-26 00:00:00','CKJ',-1,-351.0,'031010001280' union all
select '2010-06-26 00:00:00','CKJ',1,351.0,'031010001280' union all
select '2010-06-26 00:00:00','CKJ',1,283.5,'031010001280' union all
select '2010-05-21 00:00:00','CKJ',1,1071.0,'031010001280' union all
select '2010-05-21 00:00:00','CKJ',1,531.0 ,'031010001280'

create table #t2
(
times datetime,
names nvarchar(50),
num int,
moneys money,
idno nvarchar(50)
)

insert into #t2
select '09-23-2010 00:00:00','CKJ',2,6732.0,'031010001280' union all
select '07-14-2010 00:00:00','CKJ',2,554.39999999999998,'031010001280' union all
select '06-26-2010 00:00:00','CKJ',2,634.5,'031010001280' union all
select '05-21-2010 00:00:00','CKJ',2,1602.0,'031010001280'

delete a from #t2 a
inner join (select times,names,count(times) as counts from #t1 group by times,names) b
on a.times=b.times and a.names=b.names and b.counts>1
goodsecond 2010-11-09
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dawugui 的回复:]
SQL code
看不懂问题的意思,帮顶,学习,蹭分.
[/Quote]
abuying 2010-11-09
  • 打赏
  • 举报
回复
不是
要表B里面是把表A里面同一天的数据加起来的话就把表B里面的数据删除!
把A表中的的数量相加 等于B表中的数量
因为你的数据恰好是 1.0+1.0=2.0,刚好sum 与count一样,
如果A表出现三个怎么办?
所以应该是sum
zhangsuyunpk521 2010-11-09
  • 打赏
  • 举报
回复
谢谢大家围观,我按照11楼的方法解决了,也许其他的答案也是正确的,但是由于赶时间就选择了这个相对比较简洁的方法~~~~~
luoyefeng1022 2010-11-08
  • 打赏
  • 举报
回复
Delete from a where a. in(
Select b.'产品名' from b right join (
Select '时间', '产品名',count('数量')as cun from a group by '时间', '产品名' from a) a
on a.'产品名'=b.'产品名' where a.cun=b.'数量' and a.'时间=b.时间')
qh617 2010-11-08
  • 打赏
  • 举报
回复
没看懂是什么意思啊 你这两个表是个什么关系呢?为什么要删除?字段都一样的 是怎么添加数据的?
zhangsuyunpk521 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dlut_liuq 的回复:]
SQL code
;WITH CTE AS
(
SELECT 时间,产品名,贵宾编号,SUM(价格) AS 价格,SUM(数量) AS 数量 FROM 表A GROUP BY 时间,产品名, 贵宾编号
)
DELETE B
FROM 表B B
WHERE NOT EXISTS(SELECT 1 FROM CTE C WHERE B.时间=C.时间 AND B.产品名=C.产品名……
[/Quote]
杯具,忘了说我是2000的数据库了~~~~
zhangsuyunpk521 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 vidor 的回复:]
SQL code
--> 测试数据:#a
if object_id('tempdb.dbo.#a') is not null drop table #a
create table #a(时间 datetime, 产品名 varchar(8), 数量 numeric(2,1), 价格 numeric(18,14), 贵宾编号 varchar(12))
insert into #a
sele……
[/Quote]
这个不可以啊
我加一条

create table #b(时间 datetime, 产品名 varchar(8), 数量 numeric(2,1), 价格 numeric(18,14), 贵宾编号 varchar(12))
insert into #b
select '09-23-2010 00:00:00', 'CKJ', 2.0, 6732.0, '031010001280' union all
select '07-14-2010 00:00:00', 'CKJ', 2.0, 554.39999999999998, '031010001280' union all
select '06-26-2010 00:00:00', 'CKJ', 2.0, 634.5, '031010001280' union all
select '05-21-2010 00:00:00', 'CKJ', 2.0, 1602.0, '031010001280' union all
select '05-21-2010 00:00:00', 'CKJ', 2.0, 1602.0, '031010001281'

然后在变成
select * from #b b where (select count(1) from #a where 贵宾编号=b.贵宾编号 and 时间=b.时间) >= 2
结果编号为'031010001281' 就查询不出来啊
nice_dream_li 2010-11-08
  • 打赏
  • 举报
回复

DELETE #b
FROM #b a
INNER JOIN (SELECT 时间,产品名,SUM(数量)数量,SUM(价格)价格,贵宾编号 FROM #a
GROUP BY 时间,产品名,贵宾编号) b
ON a.时间=B.时间 AND a.产品名=b.产品名 AND a.数量=b.数量
AND a.贵宾编号=b.贵宾编号
SELECT * FROM #b
abuying 2010-11-08
  • 打赏
  • 举报
回复
--> 测试数据:#a
if object_id('tempdb.dbo.#a') is not null drop table #a
create table #a(时间 datetime, 产品名 varchar(8), 数量 numeric(2,1), 价格 numeric(18,14), 贵宾编号 varchar(12))
insert into #a
select '2010-07-14 00:00:00', 'CKJ', 1.0, 308.69999999999999, '031010001280' union all
select '2010-07-14 00:00:00', 'CKJ', 1.0, 245.69999999999999, '031010001280' union all
select '2010-06-26 00:00:00', 'CKJ', 1.0, 351.0, '031010001280' union all
select '2010-06-26 00:00:00', 'CKJ', -1.0, -351.0, '031010001280' union all
select '2010-06-26 00:00:00', 'CKJ', 1.0, 351.0, '031010001280' union all
select '2010-06-26 00:00:00', 'CKJ', 1.0, 283.5, '031010001280' union all
select '2010-05-21 00:00:00', 'CKJ', 1.0, 1071.0, '031010001280' union all
select '2010-05-21 00:00:00', 'CKJ', 1.0, 531.0, '031010001280'
--> 测试数据:#b
if object_id('tempdb.dbo.#b') is not null drop table #b
create table #b(时间 datetime, 产品名 varchar(8), 数量 numeric(2,1), 价格 numeric(18,14), 贵宾编号 varchar(12))
truncate table #b
insert into #b
select '09-23-2010 00:00:00', 'CKJ', 2.0, 6732.0, '031010001280' union all
select '07-14-2010 00:00:00', 'CKJ', 2.0, 554.39999999999998, '031010001280' union all
select '06-26-2010 00:00:00', 'CKJ', 2.0, 634.5, '031010001280' union all
select '05-21-2010 00:00:00', 'CKJ', 2.0, 1602.0, '031010001280'

delete #b from #b left join
(select 时间 ,产品名,贵宾编号,sum(数量)总数量 from #a group by 时间 ,产品名,贵宾编号) t
on datediff(day,#b.时间,t.时间)=0 and #b.产品名=t.产品名 and #b.贵宾编号=t.贵宾编号 and #b.数量=t.总数量
where t.时间 is not null
jamk 2010-11-08
  • 打赏
  • 举报
回复

--借用#6的表 ^.^#
--查询
DELETE FROM #b
WHERE #b.时间 IN (SELECT 时间 FROM #a)
domshaw 2010-11-08
  • 打赏
  • 举报
回复
Delete from a where a. in(
Select b.'产品名' from b right join (
Select '时间', '产品名',count('数量')as cun from a group by '时间', '产品名' from a) a
on a.'产品名'=b.'产品名' where a.cun=b.'数量' and a.'时间=b.时间')
dawugui 2010-11-08
  • 打赏
  • 举报
回复
看不懂问题的意思,帮顶,学习,蹭分.
zhangsuyunpk521 2010-11-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 szstephenzhou 的回复:]
怎么个加法呢?
[/Quote]
这个已经加好了,只要是时间相同然后比如A表里的某一天有3条数据,但是B表里面有2那一天只有2条,但是这2条的价格加起来等A表里面3条加起来的价格和就把B表里面的删除
Vidor 2010-11-07
  • 打赏
  • 举报
回复
--> 测试数据:#a
if object_id('tempdb.dbo.#a') is not null drop table #a
create table #a(时间 datetime, 产品名 varchar(8), 数量 numeric(2,1), 价格 numeric(18,14), 贵宾编号 varchar(12))
insert into #a
select '2010-07-14 00:00:00', 'CKJ', 1.0, 308.69999999999999, '031010001280' union all
select '2010-07-14 00:00:00', 'CKJ', 1.0, 245.69999999999999, '031010001280' union all
select '2010-06-26 00:00:00', 'CKJ', 1.0, 351.0, '031010001280' union all
select '2010-06-26 00:00:00', 'CKJ', -1.0, -351.0, '031010001280' union all
select '2010-06-26 00:00:00', 'CKJ', 1.0, 351.0, '031010001280' union all
select '2010-06-26 00:00:00', 'CKJ', 1.0, 283.5, '031010001280' union all
select '2010-05-21 00:00:00', 'CKJ', 1.0, 1071.0, '031010001280' union all
select '2010-05-21 00:00:00', 'CKJ', 1.0, 531.0, '031010001280'
--> 测试数据:#b
if object_id('tempdb.dbo.#b') is not null drop table #b
create table #b(时间 datetime, 产品名 varchar(8), 数量 numeric(2,1), 价格 numeric(18,14), 贵宾编号 varchar(12))
insert into #b
select '09-23-2010 00:00:00', 'CKJ', 2.0, 6732.0, '031010001280' union all
select '07-14-2010 00:00:00', 'CKJ', 2.0, 554.39999999999998, '031010001280' union all
select '06-26-2010 00:00:00', 'CKJ', 2.0, 634.5, '031010001280' union all
select '05-21-2010 00:00:00', 'CKJ', 2.0, 1602.0, '031010001280'

delete b from #b b where (select count(1) from #a where 贵宾编号=b.贵宾编号 and 时间=b.时间) >= 2
select * from #b

/*
时间 产品名 数量 价格 贵宾编号
----------------------- -------- --------------------------------------- --------------------------------------- ------------
2010-09-23 00:00:00.000 CKJ 2.0 6732.00000000000000 031010001280

(1 行受影响)

*/

飘零一叶 2010-11-07
  • 打赏
  • 举报
回复
;WITH CTE AS
(
SELECT 时间,产品名,贵宾编号,SUM(价格) AS 价格,SUM(数量) AS 数量 FROM 表A GROUP BY 时间,产品名, 贵宾编号
)
DELETE B
FROM 表B B
WHERE NOT EXISTS(SELECT 1 FROM CTE C WHERE B.时间=C.时间 AND B.产品名=C.产品名 AND B.贵宾编号=C.贵宾编号 AND B.价格=C.价格 AND B.数量=C.数量)
勿勿 2010-11-07
  • 打赏
  • 举报
回复
怎么个加法呢?
ForFumm 2010-11-07
  • 打赏
  • 举报
回复
没看懂。
zhangsuyunpk521 2010-11-07
  • 打赏
  • 举报
回复
自己UP下

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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