当前位置: 代码迷 >> Sql Server >> 求个SQL批量更新语句解决方案
  详细解决方案

求个SQL批量更新语句解决方案

热度:84   发布时间:2016-04-24 09:38:36.0
求个SQL批量更新语句
ENAME CNAME
aaaa 礼盒2件套
aaaa 礼盒2件套
aaaa_bb 礼盒2件套bb
aaaa_bb 礼盒2件套bb
aaaa_bb 礼盒2件套bb
aaaa_bb 礼盒2件套bb
aaaa_bb_1 礼盒2件套bb_1
aaaa_bb_2 礼盒2件套bb_2
aaaa_bb_3 礼盒2件套bb_3
aaaa_bb_4 礼盒2件套bb_4
bbbb 礼盒2件套
bbbb 礼盒2件套
bbbb_bb 礼盒2件套cc
bbbb_bb 礼盒2件套cc
bbbb_bb 礼盒2件套cc
bbbb_bb 礼盒2件套cc
bbbb_bb_1 礼盒2件套cc_1
bbbb_bb_2 礼盒2件套cc_2
bbbb_bb_3 礼盒2件套cc_3
bbbb_bb_4 礼盒2件套cc_4

想吧aaaa的产品中文名称都变成aaaa第一行的中文名称
类似BBBB的产品,都变成BBBB的第一行的中文名称.

这个批量更新语句应该怎么写.
------解决思路----------------------
引用:
谢谢楼上 ,

不过我没说清楚 ,是以下划线为分界线   LEFT(a.ENAME,4) 用不了

XXXX_VV1  XXXXXX_BB_1 是这样的.



CREATE TABLE #temp (ENAME VARCHAR(50), CNAME VARCHAR(50))
 
INSERT #temp
SELECT 'aaaa','礼盒2件套' UNION ALL
SELECT 'aaaa','礼盒2件套' UNION ALL
SELECT 'aaaa_bb','礼盒2件套bb' UNION ALL
SELECT 'bbbb','礼盒2件套' UNION ALL
SELECT 'bbbb','礼盒2件套' UNION ALL
SELECT 'bbbb_bb','礼盒2件套cc'
 
UPDATE a SET CNAME=b.CNAME
FROM #temp a
CROSS APPLY
(
SELECT TOP 1 CNAME FROM #temp 
WHERE ENAME LIKE LEFT(a.ENAME,
CASE CHARINDEX('_',a.ENAME) 
WHEN 0 THEN LEN(a.ENAME) 
ELSE CHARINDEX('_',a.ENAME)-1 
end)+'%' ORDER BY a.ENAME
) b
 
SELECT * FROM #temp
  相关解决方案