34,872
社区成员
发帖
与我相关
我的任务
分享--> 生成测试数据表: [aa]
IF OBJECT_ID('[aa]') IS NOT NULL
DROP TABLE [aa]
GO
CREATE TABLE [aa] ([usrcode] [int],[shuzhi] [int])
INSERT INTO [aa]
SELECT '617','32' UNION ALL
SELECT '918','57' UNION ALL
SELECT '320','18' UNION ALL
SELECT '321','22' UNION ALL
SELECT '322','19'
--> 生成测试数据表: [bb]
IF OBJECT_ID('[bb]') IS NOT NULL
DROP TABLE [bb]
GO
CREATE TABLE [bb] ([usrcode] [int],[usrguanid] [numeric](5,2),[usrshuzhi] [int])
INSERT INTO [bb]
SELECT '617','117.25','32' UNION ALL
SELECT '918','234.25','55' UNION ALL
SELECT '321','32.5','21' UNION ALL
SELECT '321','55.8','23' UNION ALL
SELECT '321',NULL,'22' UNION ALL
SELECT '918','233.25','65' UNION ALL
SELECT '320',NULL,'17' UNION ALL
SELECT '320','55.5','11' UNION ALL
SELECT '322',NULL,'30'
select b.usrcode,b.usrguanid,a.shuzhi time
from bb b left join aa a on b.usrcode=a.usrcode
where (usrguanid is not null and
b.usrshuzhi = (select top 1 m.usrshuzhi from bb m left join aa n on m.usrcode=n.usrcode
where m.usrguanid is not null and b.usrcode=m.usrcode order by abs(b.usrshuzhi - a.shuzhi),b.usrshuzhi desc)
)
or
(not exists(select 1 from bb where usrcode=b.usrcode and usrguanid is not null)
)--> 生成测试数据表: [aa]
IF OBJECT_ID('[aa]') IS NOT NULL
DROP TABLE [aa]
GO
CREATE TABLE [aa] ([usrcode] [int],[shuzhi] [int])
INSERT INTO [aa]
SELECT '617','32' UNION ALL
SELECT '918','57' UNION ALL
SELECT '320','18' UNION ALL
SELECT '321','22' UNION ALL
SELECT '322','19'
--> 生成测试数据表: [bb]
IF OBJECT_ID('[bb]') IS NOT NULL
DROP TABLE [bb]
GO
CREATE TABLE [bb] ([usrcode] [int],[usrguanid] [numeric](5,2),[usrshuzhi] [int])
INSERT INTO [bb]
SELECT '617','117.25','32' UNION ALL
SELECT '918','234.25','55' UNION ALL
SELECT '321','32.5','21' UNION ALL
SELECT '321','55.8','23' UNION ALL
SELECT '321',NULL,'22' UNION ALL
SELECT '918','233.25','65' UNION ALL
SELECT '320',NULL,'17' UNION ALL
SELECT '320','55.5','11' UNION ALL
SELECT '322',NULL,'30'
-->SQL查询如下:
SELECT usrcode,
usrguanid=(SELECT top 1 [usrguanid] FROM [bb] WHERE [usrcode]=t.[usrcode] AND [usrguanid] IS NOT NULL ORDER BY ABS([usrshuzhi]-T.[shuzhi])),
shuzhi
FROM [aa] t
/*
usrcode usrguanid shuzhi
----------- --------------------------------------- -----------
617 117.25 32
918 234.25 57
320 55.50 18
321 55.80 22
322 NULL 19
(5 行受影响)
*/这是原来回过的,有什么问题直说,再发一百贴也是一样。create table aa(usrcode int,shuzhi int)
insert into aa values(617 ,32)
insert into aa values(918 ,57)
insert into aa values(320 ,18)
insert into aa values(321 ,22)
insert into aa values(322 ,19)
create table bb(usrcode int,usrguanid decimal(18,2),usrshuzhi int)
insert into bb values(617, 117.25 ,32)
insert into bb values(918, 234.25 ,55)
insert into bb values(321, 32.5 ,21)
insert into bb values(321, 55.8 ,23)
insert into bb values(321, null ,22)
insert into bb values(918, 233.25 ,65)
insert into bb values(320, null ,17)
insert into bb values(320, 55.5 ,11)
insert into bb values(322, null ,30)
go
select m.* ,
usrguanid = (select top 1 usrguanid from bb n where m.usrcode = n.usrcode and n.usrguanid is not null order by abs(m.shuzhi - n.usrshuzhi) , n.usrshuzhi desc)
from aa m
drop table aa , bb
/*
usrcode shuzhi usrguanid
----------- ----------- --------------------
617 32 117.25
918 57 234.25
320 18 55.50
321 22 55.80
322 19 NULL
(所影响的行数为 5 行)
*/