SQL拆分总计
目前我在SQL中有以下结果: 数量 描述 体积 重量 4. 花 3,4 4.SQL拆分总计,sql,sql-server,xml,tsql,Sql,Sql Server,Xml,Tsql,目前我在SQL中有以下结果: 数量 描述 体积 重量 4. 花 3,4 4. 您可以使用递归CTE来分割行,如果数量可能大于100,则可能需要提高递归限制 declare @Test table (qty int, [description] varchar(64), volume decimal(9,2), [weight] decimal(9,2)) insert into @Test (qty, [description], volume, [weight]) values (4, 'F
您可以使用递归CTE来分割行,如果数量可能大于100,则可能需要提高递归限制
declare @Test table (qty int, [description] varchar(64), volume decimal(9,2), [weight] decimal(9,2))
insert into @Test (qty, [description], volume, [weight]) values (4, 'Flowers', 3.4, 4);
with cte as (
select qty, [description], volume, [weight], 1 as rn
from @Test
union all
select qty, [description], volume, [weight], rn + 1
from cte
where rn < qty
)
select 1 qty, [description], cast(volume / qty as decimal(9,2)) volume, cast([weight] / qty as decimal(9,2)) [weight]
from cte
for xml path('product'), root('products'), type;
-- option (maxrecursion 200); -- If you need to increase it above the default of 100
注意:如果您设置DDL+DML,如我所示,在您的问题中,您可以让人们更容易回答。一种方法是递归CTE:
WITH cte AS (
SELECT *, qty AS cc, 1 org FROM #sale
UNION ALL
SELECT cte.qty /qty
, cte.description
, cte.volume /qty
, cte.weight /qty
, cte.cc - 1 AS cc
, 0 org
FROM cte
WHERE cc > 1
)
SELECT * FROM cte
where org = 0
FOR XML path
但是,如果您有一个理货台,它将更快、更简单:
SELECT qty /qty
, description
, volume /qty
, weight /qty
FROM table
JOIN numbertables < -- number tables from 1 to max
on numbertables.values < qty
FOR XML path
你在使用microsoft sql server数据库吗?也共享你当前的sql..我在使用sql server索引你自相矛盾地说,结果是sql,但它是XML格式的。是哪一个?你的实际输入是什么样的?就这一点而言,您的输出是什么样子的?应该是行还是XML?您可以而且应该让您的问题包含更多细节;注释是一种不好的媒介,因为当涉及大量代码时,注释既不是持久的,也不是特别可读的。