【发布时间】:2020-01-09 08:02:58
【问题描述】:
我需要你的帮助。
我尝试合并我的表格,以便它们只生成一个包含 2 列的表格。
table1:产品
ID_Product | Name
1 | Test
2 | Test2
3 | Test3
4 | Test4
table2:Purchase_Header
ID_Header | Number | Date
1 | 100001 | 2020-01-03
2 | 100002 | 2020-01-02
3 | 100003 | 2020-01-03
table3:Purchase_Line
ID_Line | ID_Header | ID_Product | Price
1 | 1 | 1 | 0,5
2 | 1 | 2 | 0,6
3 | 1 | 3 | 0,7
4 | 2 | 1 | 0,8
5 | 2 | 2 | 0,9
6 | 2 | 4 | 1,0
7 | 3 | 1 | 0,3
8 | 3 | 2 | 0,2
9 | 3 | 3 | 0,1
加入:
- 产品 | ID_Product on Purchase_Line | ID_产品
- Purchase_Line | ID_Header 开启 Purchase_Header | ID_Header
目标:
- 1 表 2 列 -> ID_Product 和 Price
- 列 ID_Product -> 表产品中的所有 ID_Product -> 或至少有价格的 ID
- 列价格 -> ID_Product 列中每个 ID 的最后购买(最后日期)的最低价格
有可能:
- 一天购买了不止一次产品
- 同一天价格不同
ID_Line | ID_Header | ID_Product | Price | Date
1 | 1 | 1 | 0,5 |*2020-01-03*
2 | 1 | 2 | 0,6 |*2020-01-03*
3 | 1 | 3 | 0,7 |*2020-01-03*
4 | 2 | 1 | 0,8 | 2020-01-02
5 | 2 | 2 | 0,9 | 2020-01-02
6 | 2 | 4 | **1,0** |*2020-01-02*
7 | 3 | 1 | **0,3** |*2020-01-03*
8 | 3 | 2 | **0,2** |*2020-01-03*
9 | 3 | 3 | **0,1** |*2020-01-03*
- 购买产品的最后日期 -> ID_Product 1|2|3 为 2020-01-03,ID_Product 4 为 2020-01-02
- 本日最低价
结果应该是这样的:
ID_Product | Price
1 | 0,3
2 | 0,2
3 | 0,1
4 | 1,0
希望你能帮助我
问候 埃里克
编辑:25.06.2020
您好,我自己或下面的脚本似乎有误。
如上所述,我有两张桌子。 CSV 链接如下。
当我现在运行 T_SQL 脚本时
```
select distinct l.id_product, min(price)
from purchase_line as l
inner join purchase_header as h on l.id_header = h.id_header
where budat in (select max(h.budat) as [date] from purchase_line as l
inner join purchase_header as h on l.id_header = h.id_header
where h.ktyp = N'(Invoice)'
group by l.id_product)
group by l.id_product
```
我收到 id_product (3232,2,0) 的价格 660.0。
似乎价格取决于 2020 年 4 月 27 日的标题(较旧的日期,最低价格)而不是 2020 年 6 月 11 日(较新的日期,价格较高),我不知道为什么!脚本应使用最新的标头,当同一天有 2 个标头时,选择最低价格。
有人看到我的错误吗?
问候埃里克
【问题讨论】:
-
请阅读tsql tag info上关于如何编写一个好的T-Sql问题和edit你的问题的说明。
-
你的第二句话不应该是 2 列而不是 2 行吗?
-
@DávidLaczkó 你是对的,谢谢。已编辑
-
“0,3”的价格是多少?这意味着您必须将数字存储为字符?但我不知道那是什么意思。
-
看来,我犯了一些错误,或者代码没有按应有的方式工作。我更新了帖子。
标签: sql-server tsql