日期:2014-05-17 浏览次数:20519 次
--> 测试数据:[tb] IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO CREATE TABLE [tb]([Name] VARCHAR(4),[个数] INT,[数量] INT) INSERT [tb] SELECT '张三',2,3 UNION ALL SELECT '李四',3,3 --------------开始查询-------------------------- ;WITH t AS( SELECT b.[Name],[个数],[数量] FROM [tb] AS b ,MASTER..spt_values AS s WHERE s.number BETWEEN 1 AND b.[个数] AND s.type='P' ) SELECT *,结果=STUFF((SELECT ','+LTRIM([数量]) FROM t WHERE [Name]=a.[Name] FOR XML PATH('')),1,1,'') FROM t AS a GROUP BY [Name],[个数],[数量] ----------------结果---------------------------- /* Name 个数 数量 结果 李四 3 3 3,3,3 张三 2 3 3,3 */
------解决方案--------------------
create table tb(name nvarchar(10),个数 int,数量 int) insert into tb select N'张三',2,3 union select N'李四',3,3 select a.*,结果=stuff((select ','+rtrim(m.数量) from tb m,master..spt_values where 个数>number and type='p' and m.name=a.name for xml path('')),1,1,'') from tb a /* name 个数 数量 结果 ---------- ----------- ----------- ---------- 张三 2 3 3,3 李四 3 3 3,3,3
------解决方案--------------------
;WITH C1(Name, 个数, 数量) as( SELECT '张三', 2, 3 UNION ALL SELECT '李四', 3, 3 ) SELECT Name, 个数, CASE WHEN 个数>0 THEN STUFF(REPLICATE(';'+CAST(个数 AS varchar(10))+'', 个数),1,1,'') ELSE NULL END 数量 from c1
------解决方案--------------------
哎呀 没抢到啊
哎……
/* Name 个数 数量 ---- ----------- ------ 张三 2 2;2 李四 3 3;3;3 */
------解决方案--------------------
--> 测试数据:[tb] IF OBJECT_ID('[tb]') IS NOT NULL DROP TABLE [tb] GO CREATE TABLE [tb]([Name] VARCHAR(4),[个数] INT,[数量] INT) INSERT [tb] SELECT '张三',2,3 UNION ALL SELECT '李四',3,3 SELECT *,LEFT(REPLICATE(LTRIM(数量)+',',个数),LEN(REPLICATE(LTRIM(数量)+',',个数))-1) AS 结果 FROM TB /*张三 2 3 3,3 李四 3 3 3,3,3 (所影响的行数为 2 行)
------解决方案--------------------