首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL大神们,接分了,反复显示某行数据功能

2013-09-05 
SQL大神们,接分了,重复显示某行数据功能大概如下,因为公司要打印帖子,就是小标签,让我在系统里查询出来产

SQL大神们,接分了,重复显示某行数据功能
大概如下,因为公司要打印帖子,就是小标签,让我在系统里查询出来产品+数量,然后打印,一开始我还以为一个产品打印一笔,结果说数量有多少就打印多少笔。。。

表结构大概如下:

表A:
产品名称   数量   价格
  001      5.0    169
  002      3.0    213

效果如下:

产品名称   价格
001        169
001        169
001        169
001        169
001        169
002        213
002        213
002        213

[解决办法]


WITH a1 (item_no,qty,price)AS
(
SELECT '001',5,169 UNION all
SELECT '002',3,213
)
,a2 AS
(
SELECT item_no,qty,price,1 n FROM a1
UNION ALL
SELECT item_no,qty,price,n+1
FROM a2
WHERE n<qty
)
SELECT item_no,price FROM a2
ORDER BY item_no
OPTION(MAXRECURSION 0)

[解决办法]
create table #ta(name varchar(10),num int,price int)
insert into #ta
select '001',5.0,169
union all select '002',3.0,213

select * from #ta

select a.name,a.price
from 
(select a.* ,rn=ROW_NUMBER() over(partition by name order by getdate()) 
from #ta a,(select top 10 number from master..spt_values where type='P' and number>0)b
)a
inner join #ta b on a.rn<=b.num and a.price=b.price and a.name=b.name
drop table #tb

/*
nameprice
-----------------
001169
001169
001169
001169
001169
002213
002213
002213
*/

------解决方案--------------------


if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
go
create table #temp( [产品名称] varchar(100), [数量] float, [价格] INT);
insert #temp
select '001','5.0','169' union all
select '002','3.0','213' 

--SQL:
select a.[产品名称], a.价格 
from #temp A
INNER JOIN master..spt_values B
ON A.数量 > B.number
AND B.type = 'p'

/*
产品名称价格
001169
001169
001169
001169
001169
002213
002213
002213
*/        

热点排行