繁体   English   中英

如何循环 SQL 中的不同值并为其创建新行?

[英]How to loop over different values in SQL and create a new row for it?

我有以下数据表:

物品 基本价格 价格 价位表
一种 1个 1个 -
1个 1个 -
C 1.5 1.5 -
1.5 1.5 -
一种 1个 1.5 01
1个 1.5 01
一种 1个 1.25 02
C 1.5 1.25 02
1.5 1.25 03

当您按 item 对这些数据进行排序时,您会看到:

物品 基本价格 价格 价位表
一种 1个 1个 -
一种 1个 1.5 01
一种 1个 1.25 02
1个 1个 -
1个 1.5 01
C 1.5 1.5 -
C 1.5 1.25 02
1.5 1.5 -
1.5 1.25 03

它很好地概述了每个价目表的价格。

现在我想查询每个价目表的项目。 问题是,如果没有特定的价格表条目,则没有价格表的项目需要出现在每个结果中,价格的值为基本价格。

我希望结果数据看起来像这样:

物品 基本价格 价格 价位表
一种 1个 1个 -
一种 1个 1.5 01
一种 1个 1.25 02
一种 1个 1个 03
1个 1个 -
1个 1.5 01
1个 1个 02
1个 1个 03
C 1.5 1.5 -
C 1.5 1个 01
C 1.5 1.25 02
C 1.5 1个 03
1.5 1个 -
1.5 1个 01
1.5 1个 02
1.5 1.5 03

所以基本上,如果我查询价目表,我会返回所有存在的项目,如果它们不在查询的价目表中,则会填充基本价格。

我无法理解这个问题。 我尝试使用联接,但最终得到了多列。 我认为有一种更简单的方法。

PS 可用价目表的数量是动态的。

你的数据库设计不好。 尽管每个项目只有一个基价,但您将基价存储在价目表中。 这种冗余违反了数据库规范化,您应该在遇到任何问题之前更改它。

这是三个规范化表(主键斜体):

  • 项目(项目编号,名称,基本价格,...)
  • 价格表(价格表编号,用途,...)
  • 价格 ( item_no, price_list_no , price, ...)

然后是任务:您希望每个项目和价目表有一个结果行。 您可以通过将所有项目与所有价目表交叉连接来获得此信息。 然后外部加入价格表。

select
  i.item_no,
  i.base_price,
  coalesce(p.price, i.base_price) as price
  pl.price_list_no,
from items i
cross join price_lists pl
left outer join prices p on p.item_no = i.item_no
                         and p.price_list_no = pl.price_list_no
order by i.item_no, i.base_price;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM