首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

当发作新数据,向另一表填入数据

2012-12-25 
当产生新数据,向另一表填入数据TAB1IDCPBHXH1231120A-1 2231124A-2 3261534A-3 4271280B-1 5271284B-2 ...

当产生新数据,向另一表填入数据
TAB1
ID   CPBH       XH
1    231120     A-1 
2    231124     A-2 
3    261534     A-3 
4    271280     B-1 
5    271284     B-2 
...

说明:TAB1有目前9000多条数据,而且每天都有新数据增加,现在用户要求:

如果CPBH 的前5位数据一样,则取第6位后缀为 0 的数据,生成新表

TAB2
ID   CPBH       XH
1    231120     A-1 
3    261534     A-3 
4    271280     B-1 
...

如何处理,请高手指点,谢谢


[最优解释]

--> 测试数据:[tb]
IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb]
GO 
CREATE TABLE [tb]([ID] INT,[CPBH] INT,[XH] VARCHAR(3))
INSERT [tb]
SELECT 1,231120,'A-1' UNION ALL
SELECT 2,231124,'A-2' UNION ALL
SELECT 3,261534,'A-3' UNION ALL
SELECT 4,271280,'B-1' UNION ALL
SELECT 5,271284,'B-2'
--------------开始查询--------------------------

SELECT * FROM [tb]  AS t WHERE NOT EXISTS (SELECT 1 FROM [tb] WHERE LEFT([CPBH],5)=LEFT(t.[CPBH],5) AND [ID]<>t.[ID] AND RIGHT(t.[CPBH],1)<>0 )
----------------结果----------------------------
/* 
IDCPBHXH
1231120A-1
3261534A-3
4271280B-1
*/

[其他解释]
没看明白
[其他解释]
 
CREATE TABLE #MM (
ID INT IDENTITY(1,1),
CPBH INT ,
XH CHAR(5)
)

INSERT #MM
SELECT 231120 ,'A-1'
UNION ALL 
SELECT 231124, 'A-2' 
UNION ALL
SELECT 261534, 'A-3'
UNION ALL 
SELECT  271280, 'B-1' 
UNION ALL 
SELECT 271284,'B-2'


SELECT * FROM #MM WHERE ID IN(
SELECT MIN(ID) FROM #MM GROUP BY LEFT(CPBH,5)
)

[其他解释]
如果CPBH 的前5位数据一样,则取第6位后缀为 0 的数据
万一第六位后缀不为0呢?
[其他解释]
补充:所有数据第6位,只能是0或者是4
[其他解释]
引用:
补充:所有数据第6位,只能是0或者是4
不用补充了,已经ok 
[其他解释]
谢谢大家,测试中
[其他解释]
3 261534 A-3  这个后缀不是0,为嘛也在结果里
[其他解释]
引用:
3 261534 A-3 这个后缀不是0,为嘛也在结果里


说明:如果前5位没有相同的,后缀为0和4都可以
------其他解决方案--------------------


1、楼主帖子的标题和你的内容有些对不上哦,如果是要产生新数据,然后向另一表插入数据,使用触发器。
2、在触发器中查询插入的数据的,前5为是否有相同的,然后在插入。
[其他解释]

服务器: 消息 245,级别 16,状态 1,行 2
将 nvarchar 值 'Y' 转换为数据类型为 int 的列时发生语法错误。


说明:刚检查数据cpbh有个别数据是5位的

[其他解释]

引用:
1、楼主帖子的标题和你的内容有些对不上哦,如果是要产生新数据,然后向另一表插入数据,使用触发器。
2、在触发器中查询插入的数据的,前5为是否有相同的,然后在插入。


呵呵,因为这个新表还要从第三个表里取两列数据,所以做程序的时候用了一个刷新
[其他解释]


select a.* from #mm a
join (
select MIN(cpbh) as cpbh from #MM
group by LEFT(cpbh,5)) as b on a.cpbh=b.cpbh


[其他解释]
谢谢大家,结果基本出来了,正在核对中

热点排行