当前位置: 代码迷 >> Sql Server >> SQL 高级应用,该怎么处理
  详细解决方案

SQL 高级应用,该怎么处理

热度:3   发布时间:2016-04-24 09:44:07.0
SQL 高级应用
问题用一个例子说明:
比如数据库格式如下

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就可以了
  相关解决方案