SQL 查询输出:根据字段值插入一行
SQL Query output: Insert a row, based on a fields value
我正忙着处理一些 SQl 查询,这些查询由 excel 处理并使用单词序列号打印。这是为了给学校的水果做送货单。 80 Children 表示 80 份水果,这可以装进一个板条箱。所以对于超过 80 children 我们需要 2 个板条箱等等。此时的最大值为 240 children,即 3 个板条箱。进行计算是没有问题的,但是进行额外的行是。去年我在 excel 中做了静态的,但今年有更多的学校所以更多的数据。因此我只想在一个地方更改它,这就是 SQL 数据库。
数据如下所示:
Customer Children
ABC 240
DEF 37
GHI 90
输出应该是这样的:
Customer Children Crates
ABC 240 3
ABC 240 3
ABC 240 3
DEF 37 1
GHI 90 2
GHI 90 2
我不想要数据库中的额外行,只想要 excel(或其他程序,如 Toad)的输出。
为了测试,我将 Toad 用于 SQL,并且我通过 PowerPivot 将查询导入 excel 2010。
您可以使用递归 CTE 来完成:
with cte(customer,children,crates,i) as
(
Select customer,children, children/80 + case when children%80 = 0 then 0 else 1 end crates, 0 from test
union all
select customer,children,crates
, i + 1
from cte
where cte.i < cte.crates -1
)
select customer,children,crates
from cte
order by customer
使用您的测试数据的实例:SQLFiddle
SQLFiddle 的结果:
我正忙着处理一些 SQl 查询,这些查询由 excel 处理并使用单词序列号打印。这是为了给学校的水果做送货单。 80 Children 表示 80 份水果,这可以装进一个板条箱。所以对于超过 80 children 我们需要 2 个板条箱等等。此时的最大值为 240 children,即 3 个板条箱。进行计算是没有问题的,但是进行额外的行是。去年我在 excel 中做了静态的,但今年有更多的学校所以更多的数据。因此我只想在一个地方更改它,这就是 SQL 数据库。
数据如下所示:
Customer Children
ABC 240
DEF 37
GHI 90
输出应该是这样的:
Customer Children Crates
ABC 240 3
ABC 240 3
ABC 240 3
DEF 37 1
GHI 90 2
GHI 90 2
我不想要数据库中的额外行,只想要 excel(或其他程序,如 Toad)的输出。
为了测试,我将 Toad 用于 SQL,并且我通过 PowerPivot 将查询导入 excel 2010。
您可以使用递归 CTE 来完成:
with cte(customer,children,crates,i) as
(
Select customer,children, children/80 + case when children%80 = 0 then 0 else 1 end crates, 0 from test
union all
select customer,children,crates
, i + 1
from cte
where cte.i < cte.crates -1
)
select customer,children,crates
from cte
order by customer
使用您的测试数据的实例:SQLFiddle
SQLFiddle 的结果: