问题用一个例子说明:
比如数据库格式如下
ID place qty flag
1 昆山 7 Y
2 上海 40 Y
3 北京 10 Y
4. 苏州 6 Y
.........
我筛选出来 第一笔数据
select * from 表 where id = 1
结果如下:
1 昆山 7 Y
但是,我想得到 7个重复的数据 (重复的次数和 qty相等的)
1 昆山 7 Y 1/7
1 昆山 7 Y 2/7
1 昆山 7 Y 3/7
1 昆山 7 Y 4/7
1 昆山 7 Y 5/7
1 昆山 7 Y 6/7
1 昆山 7 Y 7/7
注意,在结果中 新加了一列呀! 可以实现吗?
还有就是可以自定义重复的次数吗,不和qty一致。
在C# 开发的项目中,加一个textbox 里面可以输入需要的重复次数,
还拿上面那个来举例,比如输入 10
1 昆山 7 Y 1/10
1 昆山 7 Y 2/10
1 昆山 7 Y 3/10
1 昆山 7 Y 4/10
1 昆山 7 Y 5/10
1 昆山 7 Y 6/10
1 昆山 7 Y 7/10
1 昆山 7 Y 8/10
1 昆山 7 Y 9/10
1 昆山 7 Y 10/10
试问,可以实现不????
------解决思路----------------------
--第一種情況:
CREATE TABLE #temp (ID int,place CHAR(4),qty int,flag CHAR(1))
INSERT #temp
SELECT 1,'昆山',7,'Y' UNION ALL
SELECT 2,'上海',40,'Y' UNION ALL
SELECT 3,'北京',10,'Y' UNION ALL
SELECT 4,'苏州',6,'Y'
;WITH a1 AS
(
SELECT *,1 n,CAST('1/'+RTRIM(qty) AS VARCHAR(50)) cqty
FROM #temp where id=1
UNION ALL
SELECT ID,place,qty,flag,n+1,CAST(RTRIM(n)+'/'+RTRIM(qty) AS VARCHAR(50))
FROM a1
WHERE n<=qty
)
SELECT * FROM a1 OPTION(MAXRECURSION 0)
------解决思路----------------------
--第二種情況:
DECLARE @n INT
SET @n=10
;WITH a1 AS
(
SELECT *,1 n,CAST('1/'+RTRIM(@n) AS VARCHAR(50)) cqty
FROM #temp where id=1
UNION ALL
SELECT ID,place,qty,flag,n+1,CAST(RTRIM(n)+'/'+RTRIM(@n) AS VARCHAR(50))
FROM a1
WHERE n<=@n
)
SELECT * FROM a1 OPTION(MAXRECURSION 0)
------解决思路----------------------
DECLARE @NUM INT
SET @NUM=7
SELECT
A.*,CAST(B.number AS VARCHAR(10))+'/'+CAST(@NUM AS VARCHAR(10))
FROM
TB A,master..spt_values B
WHERE B.type='P' AND B.number>0 AND B.number<=@NUM
AND A.ID=1
你直接改@NUM就可以了