当前位置: 代码迷 >> Sql Server >> SQL查询有关问题,请多指点指点!着急
  详细解决方案

SQL查询有关问题,请多指点指点!着急

热度:9   发布时间:2016-04-27 10:50:01.0
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 ALLSELECT '李四',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 aGROUP 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,3select 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 ALLSELECT '李四', 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 ALLSELECT '李四',3,3SELECT *,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……
  相关解决方案