SQL拆分总计

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

目前我在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, '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?您可以而且应该让您的问题包含更多细节;注释是一种不好的媒介,因为当涉及大量代码时,注释既不是持久的,也不是特别可读的。