Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL从一条记录返回多行_Sql - Fatal编程技术网

SQL从一条记录返回多行

SQL从一条记录返回多行,sql,Sql,这与减少重复记录相反。 创建实际库存清单的SQL查询 如果小部件xyz的数量为1,则返回1行,如果有5,则返回5行,以此类推。 用于特定仓库中的所有小部件 以前,这是通过一个宏处理excel中的一个范围,检查“数量”列。有没有一种方法可以代替单个查询 这些表是由应用程序生成的FoxPro dbf文件,我正在将其输出到html中。您可以使用动态sql执行此操作。您可以使用数字从1到maxquantity的表,并按数量联接您的表对于sql 2005/2008,请参阅 CROSS APPLY 我要做

这与减少重复记录相反。 创建实际库存清单的SQL查询 如果小部件xyz的数量为1,则返回1行,如果有5,则返回5行,以此类推。 用于特定仓库中的所有小部件

以前,这是通过一个宏处理excel中的一个范围,检查“数量”列。有没有一种方法可以代替单个查询


这些表是由应用程序生成的FoxPro dbf文件,我正在将其输出到html中。您可以使用动态sql执行此操作。

您可以使用数字从1到maxquantity的表,并按数量联接您的表对于sql 2005/2008,请参阅

CROSS APPLY
我要做的是用一个子表交叉应用每一行,子表的行数与qty的行数相同。第二个问题是如何创建子表,我建议创建一个xml字符串,然后用xml操作符解析它 我希望这能给你一个起点

declare @table table (sku int, qty int);
insert into @table values (1, 5), (2,4), (3,2);
select * from @table;

sku         qty
----------- -----------
1           5
2           4
3           2
您可以生成:

with MainT as (
    select *, convert(xml,'<table>'+REPLICATE('<r></r>',qty)+'</table>') as pseudo_table
    from @table 
)
select p.sku, p.qty
from MainT p 
CROSS APPLY 
(
    select p.sku from p.pseudo_table.nodes('/table/r') T(row)
) crossT


sku         qty
----------- -----------
1           5
1           5
1           5
1           5
1           5
2           4
2           4
2           4
2           4
3           2
3           2
这就是你想要的吗?
说真的,伙计。。。下一次你要花更多的精力写你的问题。不可能准确地知道你在寻找什么。

代替生成Nestor字符串和使用XML解析函数来生成一个计数器,正如你所建议的那样,你可以考虑加入递归CTE作为计数器,正如LukLed所暗示的:

WITH Counter AS
(
    SELECT 0 i

    UNION ALL

    SELECT i + 1
    FROM Counter
    WHERE i < 100
),
Data AS
(
    SELECT 'A' sku, 1 qty
    UNION
    SELECT 'B', 2
    UNION
    SELECT 'C', 3
)
SELECT * 
FROM Data
    INNER JOIN Counter ON i < qty
根据查询分析器,此查询比xml伪表快得多。这种方法还提供了一个具有自然密钥sku的记录集,即


MSSQL中的默认递归限制为100,这将限制您的计数器。如果数量大于100,则可以增加此限制、使用嵌套计数器或创建用于计数的物理表。

此问题的答案在很大程度上取决于您使用的datbase平台。SQL Server?神谕Access?有没有这样一个简单的连接示例我可以参考?FoxPro表格,通常先在mssql或Access中构建内容,然后我复制网页中的内容使用创建一个包含数量行的表格的想法,我尝试了这样的方法,然后执行与此类似的查询:从widgets内部连接widgets上的RowAmts中选择widgets.SKU;然而,创建一个包含100行100行或99行99行99行的巨型表的前景似乎是错误的。或者是access和mssql,但表是vfpt,这只会增加问题的复杂性。