日期:2014-05-17  浏览次数:20851 次

sql 查询 string
上次问了sql查询,用string连接起来,同志们说用for xml path,现在遇到个新问题,

这个查出来的如果是ID组成的,像最后一个字段是由ID组成的,如何把ID转成外键表中的name
------最佳解决方案--------------------
select x.pid,stuff((select ','+a.name from a inner join B on  a.antennaid=b.antennaid where b.pid=x.pid for XML path('')),1,1,'') name
from b as x
group by x.pID
------其他解决方案--------------------
引用:
上次问了sql查询,用string连接起来,同志们说用for xml path,现在遇到个新问题,

这个查出来的如果是ID组成的,像最后一个字段是由ID组成的,如何把ID转成外键表中的name


我就想实现pid name的结构,例如1: 读卡器1,读卡器2,读卡器3  2:读卡器2,读卡器3的结构
------其他解决方案--------------------
这种变态的存储,只能用变态的拆分,一个一个来拆。substring这些来提取
------其他解决方案--------------------
引用:
select x.pid,stuff((select ','+a.name from a inner join B on  a.antennaid=b.antennaid where b.pid=x.pid for XML path('')),1,1,'') name
from b as x
group by x.pID

我想如果我一个表中加上时间呢,再怎么实现,比如表结构是这样的:id  date name,如何根据时间组成这样的形式:1  2012-01-01 name1,name2,name3   2 2012-01-02 name2,name1,name3
------其他解决方案--------------------
引用:
这种变态的存储,只能用变态的拆分,一个一个来拆。substring这些来提取
我写出来是这个样式,写出来了,但是出现了重复,SELECT b.pid,CONVERT(varchar(12) , B.intime, 111 ),LEFT(UserList,LEN(UserList)-1) FROM (  SELECT intime,pid ,     
(SELECT rtrim(antennaid)+'→' FROM tracks 
WHERE CONVERT(varchar(12) ,intime, 111 )=CONVERT(varchar(12) ,A.intime, 111 ) and a.pid=pid FOR XML PATH('')) AS UserList  
FROM tracks A   GROUP BY CONVERT(varchar(12) , intime, 111 ),intime ,pid ) B where b.pid=2代码是这样的
------其他解决方案--------------------
2楼的没实现你的要求?你5楼的最简单的办法就是distinct一下
------其他解决方案--------------------
引用:
引用:这种变态的存储,只能用变态的拆分,一个一个来拆。substring这些来提取我写出来是这个样式,写出来了,但是出现了重复,SELECT b.pid,CONVERT(varchar(12) , B.intime, 111 ),LEFT(UserList,LEN(UserList)-1) FROM (  SELECT intime……


GROUP BY CONVERT(varchar(12) , intime, 111 ),pid  最后一句intime 去掉