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

SQL查询问题,请多指点指点!!着急!
已知表结构如下:
Name 个数 数量  
张三 2 3  
李四 3 3  

用SQL 怎么能实现 如下结果  

Name 个数 数量 结果
张三 2 3 3,3
李四 3 3 3,3,3



------解决方案--------------------
SQL code
--> 测试数据:[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
*/

------解决方案--------------------
SQL code

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

------解决方案--------------------
SQL code

;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

------解决方案--------------------
哎呀 没抢到啊 
哎……

SQL code


/*
Name 个数          数量
---- ----------- ------
张三   2           2;2
李四   3           3;3;3

*/

------解决方案--------------------
SQL code
--> 测试数据:[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 行)

------解决方案--------------------
探讨
SQL code
--> 测试数据:[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


SEL……

------解决方案--------------------
探讨

SQL code
--> 测试数据:[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 *,LE……