日期:2014-05-17 浏览次数:20668 次
--> 测试数据:[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 行)
------解决方案--------------------