接上一个帖子 求sql 急用

残月照我心 2014-02-27 04:45:57
House表 一条数据
电话 户型 数据类型 楼盘名称 时间 区域
12132145545 洋房 成交 奥园越时代 2014-02-26 null
HouseTemp 3条数据
135 大户型 进线 中华 2014-02-26 越秀
136 小户型 来访 来华 2014-02-26 越秀区
12132145545 小户型 来访 月华 2014-02-26 天河区
当HouseTemp的电话等于House表中电话时,判断House表的其它属性是否包含了HouseTemp表的其他属性的内容
包含则不处理 不包含则更新

更新格式为"成交,进线,来访" 以逗号隔开
例如:HouseTemp表第三条数据电话和house电话相同则处理
最终House表数据变成
电话 户型 数据类型 楼盘名称 时间 区域
12132145545 洋房,小户型 成交,来访 奥园越时代,月华 2014-02-26 天河区


求一个sql语句
上一个帖子:http://bbs.csdn.net/topics/390718562
...全文
312 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
残月照我心 2014-03-04
  • 打赏
  • 举报
回复
接上一个帖子 求sql 急用 阅读次数:242次;回复次数:22次
残月照我心 2014-03-04
  • 打赏
  • 举报
回复
沉到底了
残月照我心 2014-03-03
  • 打赏
  • 举报
回复
引用 20 楼 Myue 的回复:
楼主找一下 阳泉酒家小当家 这是高手
@阳泉酒家小当家
myue 2014-03-02
  • 打赏
  • 举报
回复
楼主找一下 阳泉酒家小当家 这是高手
残月照我心 2014-03-02
  • 打赏
  • 举报
回复
跪求高手解答 谢谢
myue 2014-03-02
  • 打赏
  • 举报
回复
高手太多了徐学习了
残月照我心 2014-02-28
  • 打赏
  • 举报
回复
当HouseTemp的电话等于House表中电话时,判断House表的其它属性是否包含了HouseTemp表的其他属性的内容 包含则不处理 不包含则更新
残月照我心 2014-02-28
  • 打赏
  • 举报
回复
引用 6 楼 joyful1972 的回复:
更正一下,还少一个区域 UPDATE house SET house.户型 = house.户型 + ',' + housetemp.户型, house.数据类型 = house.数据类型 + ',' + housetemp.数据类型, house.楼盘名称 = house.楼盘名称 + ',' + housetemp.楼盘名称, house.区域 = house.区域 + ',' + housetemp.区域 FROM house INNER JOIN housetemp ON house.电话 = housetemp.电话
你还少了一个判断哦,就是判断house是否存在或者说包含housetemp的内容哦 这个是重点
joyful1972 2014-02-28
  • 打赏
  • 举报
回复
更正一下,还少一个区域 UPDATE house SET house.户型 = house.户型 + ',' + housetemp.户型, house.数据类型 = house.数据类型 + ',' + housetemp.数据类型, house.楼盘名称 = house.楼盘名称 + ',' + housetemp.楼盘名称, house.区域 = house.区域 + ',' + housetemp.区域 FROM house INNER JOIN housetemp ON house.电话 = housetemp.电话
joyful1972 2014-02-28
  • 打赏
  • 举报
回复
--显示结果 select * from house 电话 户型 数据类型 楼盘名称 时间 区域 12132145545 洋房,小户 成交 ,来访 奥园越时代,月华 2014-02-26
joyful1972 2014-02-28
  • 打赏
  • 举报
回复
UPDATE house SET house.户型 = house.户型 + ',' + housetemp.户型, house.数据类型 = house.数据类型 + ',' + housetemp.数据类型, house.楼盘名称 = house.楼盘名称 + ',' + housetemp.楼盘名称 FROM house INNER JOIN housetemp ON house.电话 = housetemp.电话
残月照我心 2014-02-28
  • 打赏
  • 举报
回复
引用 2 楼 fredrickhu 的回复:
没看懂 坐等唐诗和着急。
那里没看懂哦?
--小F-- 2014-02-28
  • 打赏
  • 举报
回复
没看懂 坐等唐诗和着急。
残月照我心 2014-02-28
  • 打赏
  • 举报
回复
大神 @唐诗三百首 @DBA_Huangzj 求帮忙
残月照我心 2014-02-28
  • 打赏
  • 举报
回复
引用 15 楼 xiaomou_mou 的回复:
[quote=引用 14 楼 dotnetstudio 的回复:] 针对为空的问题可以这样处理

UPDATE house
 SET house.户型 = a.户型, 
       house.数据类型 = a.数据类型, 
       house.楼盘名称 = a.楼盘名称,
       house.区域 = a.区域
FROM  (
select h.电话,ISNULL(ht.户型,case when charindex(ht.户型, h.户型)=0 then h.户型+','+ht.户型 else h.户型 end) 户型,
  ISNULL(ht.户型,case when charindex(ht.数据类型, h.数据类型)=0 then h.数据类型+','+ht.数据类型 else h.数据类型 end) 数据类型,
  ISNULL(ht.户型,case when charindex(ht.楼盘名称, h.楼盘名称)=0 then h.楼盘名称+','+ht.楼盘名称 else h.楼盘名称 end) 数据类型,
  ISNULL(ht.户型,case when charindex(ht.时间, h.时间)=0 then h.时间+','+ht.时间 else h.时间 end) 时间,
  ISNULL(ht.户型,case when charindex(ht.区域, h.区域)=0 then h.区域+','+ht.区域 else h.区域 end) 区域
from House h
inner join HouseTemp ht on h.电话 = ht.电话 
) a INNER JOIN
       house b ON a.电话 = b.电话
那第二个问题呢? 就是第二条数据没处理 麻烦下了[/quote] 加上Isnull 数据都没变化,没处理到更新
UPDATE house
 SET house.HouseType = a.HouseType, 
       house.DataType = a.DataType, 
       house.ProjectName  = a.ProjectName ,
       house.Area = a.Area
FROM  (
select h.Phone,
  ISNULL(ht.HouseType,case when charindex(ht.HouseType, h.HouseType)=0 then h.HouseType+','+ht.HouseType 
            else h.HouseType end) HouseType,
 ISNULL(ht.DataType, case when charindex(ht.DataType, h.DataType)=0 then h.DataType+','+ht.DataType 
            else h.DataType end) DataType,
  ISNULL(ht.ProjectName,case when charindex(ht.ProjectName , h.ProjectName )=0 then h.ProjectName +','+ht.ProjectName  
            else h.ProjectName  end) ProjectName,
 ISNULL(ht.Area, case when charindex(ht.Area, h.Area)=0 then h.Area+','+ht.Area 
            else h.Area end) Area
from House h
inner join HouseTemp ht on h.Phone = ht.Phone 
) a INNER JOIN
       house b ON a.Phone = b.Phone
KeepSayingNo 2014-02-28
  • 打赏
  • 举报
回复
关于你提到的第2条HouseTemp有可能有两个一样的电话的情况,那么就只能这样做了,新建一个临时表#temp,执行下面的语句

insert into #temp select *,row_number() over(patition by 电话) as rn from HouseTemp
然后找出#temp中rn最大的赋值给整型变量@num,定义一个变量@i起始值为1再用下面的语句

while @i<=@num
begin

UPDATE house
 SET house.户型 = a.户型, 
       house.数据类型 = a.数据类型, 
       house.楼盘名称 = a.楼盘名称,
       house.区域 = a.区域
FROM  (
select h.电话,ISNULL(ht.户型,case when charindex(ht.户型, h.户型)=0 then h.户型+','+ht.户型 else h.户型 end) 户型,
  ISNULL(ht.户型,case when charindex(ht.数据类型, h.数据类型)=0 then h.数据类型+','+ht.数据类型 else h.数据类型 end) 数据类型,
  ISNULL(ht.户型,case when charindex(ht.楼盘名称, h.楼盘名称)=0 then h.楼盘名称+','+ht.楼盘名称 else h.楼盘名称 end) 数据类型,
  ISNULL(ht.户型,case when charindex(ht.时间, h.时间)=0 then h.时间+','+ht.时间 else h.时间 end) 时间,
  ISNULL(ht.户型,case when charindex(ht.区域, h.区域)=0 then h.区域+','+ht.区域 else h.区域 end) 区域
from House h
inner join #temp ht on h.电话 = ht.电话 
where rn = @i
) a INNER JOIN
       house b ON a.电话 = b.电话
       
 set @i=@i+1

end
残月照我心 2014-02-28
  • 打赏
  • 举报
回复
引用 14 楼 dotnetstudio 的回复:
针对为空的问题可以这样处理

UPDATE house
 SET house.户型 = a.户型, 
       house.数据类型 = a.数据类型, 
       house.楼盘名称 = a.楼盘名称,
       house.区域 = a.区域
FROM  (
select h.电话,ISNULL(ht.户型,case when charindex(ht.户型, h.户型)=0 then h.户型+','+ht.户型 else h.户型 end) 户型,
  ISNULL(ht.户型,case when charindex(ht.数据类型, h.数据类型)=0 then h.数据类型+','+ht.数据类型 else h.数据类型 end) 数据类型,
  ISNULL(ht.户型,case when charindex(ht.楼盘名称, h.楼盘名称)=0 then h.楼盘名称+','+ht.楼盘名称 else h.楼盘名称 end) 数据类型,
  ISNULL(ht.户型,case when charindex(ht.时间, h.时间)=0 then h.时间+','+ht.时间 else h.时间 end) 时间,
  ISNULL(ht.户型,case when charindex(ht.区域, h.区域)=0 then h.区域+','+ht.区域 else h.区域 end) 区域
from House h
inner join HouseTemp ht on h.电话 = ht.电话 
) a INNER JOIN
       house b ON a.电话 = b.电话
那第二个问题呢? 就是第二条数据没处理 麻烦下了
KeepSayingNo 2014-02-28
  • 打赏
  • 举报
回复
针对为空的问题可以这样处理

UPDATE house
 SET house.户型 = a.户型, 
       house.数据类型 = a.数据类型, 
       house.楼盘名称 = a.楼盘名称,
       house.区域 = a.区域
FROM  (
select h.电话,ISNULL(ht.户型,case when charindex(ht.户型, h.户型)=0 then h.户型+','+ht.户型 else h.户型 end) 户型,
  ISNULL(ht.户型,case when charindex(ht.数据类型, h.数据类型)=0 then h.数据类型+','+ht.数据类型 else h.数据类型 end) 数据类型,
  ISNULL(ht.户型,case when charindex(ht.楼盘名称, h.楼盘名称)=0 then h.楼盘名称+','+ht.楼盘名称 else h.楼盘名称 end) 数据类型,
  ISNULL(ht.户型,case when charindex(ht.时间, h.时间)=0 then h.时间+','+ht.时间 else h.时间 end) 时间,
  ISNULL(ht.户型,case when charindex(ht.区域, h.区域)=0 then h.区域+','+ht.区域 else h.区域 end) 区域
from House h
inner join HouseTemp ht on h.电话 = ht.电话 
) a INNER JOIN
       house b ON a.电话 = b.电话
残月照我心 2014-02-28
  • 打赏
  • 举报
回复
引用 12 楼 dotnetstudio 的回复:
麻烦你再看看,试试下面的

UPDATE house
 SET house.户型 = a.户型, 
       house.数据类型 = a.数据类型, 
       house.楼盘名称 = a.楼盘名称,
       house.区域 = a.区域
FROM  (
select h.电话,case when charindex(ht.户型, h.户型)=0 then h.户型+','+ht.户型 else h.户型 end 户型,
  case when charindex(ht.数据类型, h.数据类型)=0 then h.数据类型+','+ht.数据类型 else h.数据类型 end 数据类型,
  case when charindex(ht.楼盘名称, h.楼盘名称)=0 then h.楼盘名称+','+ht.楼盘名称 else h.楼盘名称 end 数据类型,
  case when charindex(ht.时间, h.时间)=0 then h.时间+','+ht.时间 else h.时间 end 时间,
  case when charindex(ht.区域, h.区域)=0 then h.区域+','+ht.区域 else h.区域 end 区域
from House h
inner join HouseTemp ht on h.电话 = ht.电话 
) a INNER JOIN
       house b ON a.电话 = b.电话
代码是没问题了,但是好像达不到要求哦 如果我House表字段的数据是空的 好像就不执行更新 还有一个问题就是HouseTemp如果有2条电话与House相同好像只把第一条记录更新到House 第二条就没处理了
KeepSayingNo 2014-02-28
  • 打赏
  • 举报
回复
麻烦你再看看,试试下面的

UPDATE house
 SET house.户型 = a.户型, 
       house.数据类型 = a.数据类型, 
       house.楼盘名称 = a.楼盘名称,
       house.区域 = a.区域
FROM  (
select h.电话,case when charindex(ht.户型, h.户型)=0 then h.户型+','+ht.户型 else h.户型 end 户型,
  case when charindex(ht.数据类型, h.数据类型)=0 then h.数据类型+','+ht.数据类型 else h.数据类型 end 数据类型,
  case when charindex(ht.楼盘名称, h.楼盘名称)=0 then h.楼盘名称+','+ht.楼盘名称 else h.楼盘名称 end 数据类型,
  case when charindex(ht.时间, h.时间)=0 then h.时间+','+ht.时间 else h.时间 end 时间,
  case when charindex(ht.区域, h.区域)=0 then h.区域+','+ht.区域 else h.区域 end 区域
from House h
inner join HouseTemp ht on h.电话 = ht.电话 
) a INNER JOIN
       house b ON a.电话 = b.电话
加载更多回复(3)

34,593

社区成员

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

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