请教一SQL难题,达人进来秀一下~MS SQL,多纪录合并问题.

yueye19800 2006-02-23 07:36:22

A表
-------------------------
PICid PICurl
33 a.jpg
33 b.jpg
33 c.jpg
33 d.jpg
37 2.jpg
37 3.jpg
37 4.jpg
37 5.jpg
37 6.jpg
------------------------
合并成
B表
--------------------------------------------------------
PICid PICurl
33 a.jpg**b.jpg**c.jpg**d.jpg
37 2.jpg**3.jpg**4.jpg**5.jpg**6.jpg
------------------------------------------------------------

在MSSQL中此种SQL语句有可能实现吗?


致辞 礼
...全文
110 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueye19800 2006-02-24
  • 打赏
  • 举报
回复
你是最棒的.
wgsasd311 2006-02-23
  • 打赏
  • 举报
回复
老大学东东好快,才几个月时间SQL 2005就使得如此灵活.
lsqkeke 2006-02-23
  • 打赏
  • 举报
回复
老大的第一种写法 是在SQL2005环境下吧
zjcxc 2006-02-23
  • 打赏
  • 举报
回复
PICid PICurl
33 a.jpg**b.jpg**c.jpg**d.jpg
37 2.jpg**3.jpg**4.jpg**5.jpg**6.jpg
zjcxc 2006-02-23
  • 打赏
  • 举报
回复
-- 示例(SQL 2000)

-- 示例数据
CREATE TABLE TA(PICid int, PICurl varchar(10))
INSERT TA SELECT 33, 'a.jpg'
UNION ALL SELECT 33, 'b.jpg'
UNION ALL SELECT 33, 'c.jpg'
UNION ALL SELECT 33, 'd.jpg'
UNION ALL SELECT 37, '2.jpg'
UNION ALL SELECT 37, '3.jpg'
UNION ALL SELECT 37, '4.jpg'
UNION ALL SELECT 37, '5.jpg'
UNION ALL SELECT 37, '6.jpg'
GO

-- 合并处理函数
CREATE FUNCTION f_str(@PICid int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r = ''
SELECT @r = @r + '*' + PICurl + '*'
FROM TA
WHERE @PICid = PICid
RETURN(SUBSTRING(@r, 2, LEN(@r)-2))
END
GO

-- 调用函数实现处理
SELECT PICid,
PICurl = dbo.f_str(PICid)
FROM TA
GROUP BY PICid
GO

DROP TABLE TA
DROP FUNCTION f_str
zjcxc 2006-02-23
  • 打赏
  • 举报
回复
-- 结果

PICid PICurl
33 a.jpg**b.jpg**c.jpg**d.jpg*
37 2.jpg**3.jpg**4.jpg**5.jpg**6.jpg*
zjcxc 2006-02-23
  • 打赏
  • 举报
回复
-- 示例

-- 示例数据
DECLARE @A TABLE(PICid int, PICurl varchar(10))
INSERT @A SELECT 33, 'a.jpg'
UNION ALL SELECT 33, 'b.jpg'
UNION ALL SELECT 33, 'c.jpg'
UNION ALL SELECT 33, 'd.jpg'
UNION ALL SELECT 37, '2.jpg'
UNION ALL SELECT 37, '3.jpg'
UNION ALL SELECT 37, '4.jpg'
UNION ALL SELECT 37, '5.jpg'
UNION ALL SELECT 37, '6.jpg'

-- 合并处理
SELECT PICid,
PICurl = ISNULL([1] + '*', '')
+ ISNULL('*' + [2] + '*', '')
+ ISNULL('*' + [3] + '*', '')
+ ISNULL('*' + [4] + '*', '')
+ ISNULL('*' + [5] + '*', '')
+ ISNULL('*' + [6] + '*', '')
+ ISNULL('*' + [7] + '*', '')
FROM(
SELECT PICid, PICurl,
row = ROW_NUMBER() OVER(PARTITION BY PICid ORDER BY PICurl)
FROM @A
)DATA
PIVOT(
MAX(PICurl)
FOR row IN([1], [2], [3], [4], [5], [6], [7])
)p

27,581

社区成员

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

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