t-sql根据字段值返回多行

时间:2011-02-15 22:52:57

标签: tsql

我正在尝试在只允许t-sql的系统上运行导出。我知道足够的php来制作一个foreach循环,但我不知道足够的t-sql为给定数量生成多行。 我需要一个结果来制作一个“1/4”的项目列表,如结果中包含的数据

给出类似

的表格
orderid, product, quantity
1000,ball,3
1001,bike,4
1002,hat,2

如何获得选择查询结果,如:

  

orderid,item_num,total_items,   产品

     

1000,1,3,球

     

1000,2,3,球

     

1000,3,3,球

     

1001,1,4,自行车

     

1001,2,4,自行车

     

1001,3,4,自行车

     

1001,4,4,自行车

     

1002,1,2,帽子

     

1002,2,2,帽子

3 个答案:

答案 0 :(得分:4)

您可以借助辅助数字表来执行此操作。

;WITH T(orderid, product, quantity) AS
(
select 1000,'ball',3 union all
select 1001,'bike',4 union all
select 1002,'hat',2
)

SELECT orderid, number as item_num, quantity as total_items, product
FROM T
JOIN master..spt_values on number> 0 and number <= quantity
where type='P'

注意:上面的代码使用master..spt_values表 - 这仅用于演示目的我建议您使用one of the techniques here创建自己的计数表。

答案 1 :(得分:2)

如果您使用的是SQL Server 2005或更高版本,则可以尝试使用递归CTE而不是计数表。

;WITH CTE AS
(
    SELECT orderid, 1 item_num, product, quantity
    FROM YourTable
    UNION ALL
    SELECT orderid, item_num+1, product, quantity
    FROM CTE
    WHERE item_num < quantity
)
SELECT *
FROM CTE
OPTION (MAXRECURSION 0)

我不在配备数据库引擎的计算机上,我可以测试它,所以让我知道它是怎么回事。

答案 2 :(得分:1)

好吧,如果您知道任何产品的产品数量的最大值(并且它不是太大,比如4),您可以:

  • 创建一个名为Nums的帮助器表,其中包含1个整数列n,行包含1,2,3,4

  • 运行

     SELECT * from Your_table, Nums
     WHERE  Nums.n <= Your_table.quantity