哈希结果从数据库,这是可能的吗?



我不知道问题措辞是否正确,但我想做以下事情:

我有一个名为sales的表它包含以下列:

------------------------------------------------
| PRODUCT_NAME | PRODUCT_QUANTITY | ExpierDate |
------------------------------------------------

如果ISELECT * FROM sales,那么结果将是:

------------------------------------------------
| PRODUCT_NAME | PRODUCT_QUANTITY | ExpierDate |
------------------------------------------------
| TestName     |        5         | 2021-6-12  |
| TestName     |        2         | 2024-10-18 |
------------------------------------------------

我需要做的是选择查询并得到这样的结果:

------------------------------------------------
| PRODUCT_NAME | PRODUCT_QUANTITY | ExpierDate |
------------------------------------------------
| TestName     |        1        | 2021-6-12   |
| TestName     |        2        | 2021-6-12   |
| TestName     |        3        | 2021-6-12   |
| TestName     |        4        | 2021-6-12   |
| TestName     |        5        | 2021-6-12   |
| TestName     |        1        | 2024-10-18  |
| TestName     |        2        | 2024-10-18  |
------------------------------------------------

这可能吗?

我怎么能做到这一点…!?

我建议直接使用递归CTE:

with recursive cte as (
select product_name, product_quantity, expire_date, 1 as n
from sales s
union all
select product_name, product_quantity, expire_date, n + 1
from cte
where n < product_quantity
)
select *
from cte
order by product_name, product_quantity, expire_date, n;

这是一个db<>小提琴

正如我在评论中提到的,使用cte创建伪数据来填充行非常容易:

with RECURSIVE quan(quantity) AS (
SELECT 1 
UNION ALL
SELECT quantity+1 FROM quan WHERE quantity < 10 --you may have to increase this
)
SELECT tb.PRODUCT_NAME ,quan.quantity as PRODUCT_QUANTITY,tb.ExpierDate 
FROM [tb]  -- your result table
JOIN quan on tb.PRODUCT_QUANTITY >= quan.quantity
ORDER BY tb.time,quan.quantity

这里是db<>
在伪数据中使用int列作为time列,但我认为查询本身仍然可以工作。
在递归cte中,您可能必须根据最大数量增加where部分以创建更多伪数量数据。

最新更新