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 )
----------------结果----------------------------
/*
ID CPBH XH
1 231120 A-1
3 261534 A-3
4 271280 B-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
------其他解决方案--------------------
不用补充了,已经ok
------其他解决方案--------------------
谢谢大家,测试中
------其他解决方案--------------------
3 261534 A-3 这个后缀不是0,为嘛也在结果里
------其他解决方案--------------------
说明:如果前5位没有相同的,后缀为0和4都可以
------其他解决方案--------------------