请教行列转换问题?

JOHNCOOLS 2007-08-07 10:22:24
表结构如下:
viw_DriverInfo
CarID DriverName ConnPhone DriverIDNo
001 张三 020-12345678 00000001
001 李四 010-12345678 00000002
001 小明 021-12345678 00000014
001 小张 13511285122 00000005
002 高辉 13511285100 00000008
002 小光 13511285111 00000009
002 张三 020-12345678 00000001
003 王六 13511285177 00000102

现在希望通过一个新表或视图实现如下的
CarID DriverName1 ConnPhone1 DriverName2 ConnPhone2 DriverName3 ConnPhone ..
001 张三 020-12345678 李四 010-12345678 小明 021-12345678
002 高辉 13511285100 小光 13511285111


补充说明:同一个CarID最多只会出现4个DriverName
DriverIDNo是DriverName的标识字段唯一的
CarID和DriverName是多对多的关系,即例子中 001和002都分别有张三存在


麻烦各位帮帮忙~!谢谢~!
...全文
207 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Limpire 2007-08-08
  • 打赏
  • 举报
回复
/*
这里“002 高辉 13511285100 小光 13511285111”还要不要张三?按要处理:
要一个函数:
*/

CREATE FUNCTION fun_DriverInfo(@CarID varchar(3))
RETURNS varchar(1000)
AS
BEGIN
DECLARE @Result varchar(1000)
SET @Result=''
SELECT @Result = @Result + ' ' + DriverName + ' ' + ConnPhone FROM viw_DriverInfo WHERE CarID = @CarID
RETURN(stuff(@Result, 1, 1, ''))
End
GO

SELECT CarID, dbo.fun_DriverInfo(CarID) FROM viw_DriverInfo a GROUP BY CarID


/*
这里“002 高辉 13511285100 小光 13511285111”还要不要张三?按不要的处理:
要一个函数:
*/

CREATE FUNCTION fun_DriverInfo(@CarID varchar(3))
RETURNS varchar(1000)
AS
BEGIN
DECLARE @Result varchar(1000)
SET @Result=''
SELECT @Result = @Result + ' ' + DriverName + ' ' + ConnPhone FROM viw_DriverInfo a WHERE CarID = @CarID AND DriverName NOT IN (SELECT DriverName FROM viw_DriverInfo WHERE CarID < a.CarID)
RETURN(stuff(@Result, 1, 1, ''))
End
GO

SELECT CarID, dbo.fun_DriverInfo(CarID) FROM viw_DriverInfo a GROUP BY CarID
Limpire 2007-08-08
  • 打赏
  • 举报
回复
再想想吧,不过SQL不是万能的
JOHNCOOLS 2007-08-08
  • 打赏
  • 举报
回复
我想把DriverName1 ConnPhone1 DriverName2 ConnPhone2 DriverName3等等这些以独立字段形式的出现可以不?!
JOHNCOOLS 2007-08-08
  • 打赏
  • 举报
回复
张三要啊!!只不过我省略了~!

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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