我正在使用 MSsql,但我很難從SELECT查詢中獲取結果。我有 3 張桌子。
- 第一張桌子
Product - 第二張桌子
Seller - 第三張桌子
Customer
(關于客戶的資料 - 買家和賣家)。
select * from Product;
id(PK) | name_product
----------------------
1 | apple
2 | orange
3 | juice
select * from Seller;
id_seller(PK) | id_product | product_placement_date
---------------------------------------------------
45 | 3 | 2020-01-09
46 | 3 | 2020-01-05
58 | 2 | 2020-02-08
49 | 2 | 2020-01-04
43 | 1 | 2020-01-06
select * from Customer;
id_customer(PK) | name_customer
---------------------------
43 | Alice
45 | Sam
46 | Katy
49 | Soul
58 | Fab
我正在尋找產品的名稱和放置該產品的第一個賣家(給定第一個放置日期)。
我試過這個:
SELECT C.name_product,
P.mindate,
P.name_customer
FROM Product AS C
CROSS APPLY(SELECT MIN(S.product_placement_date) as mindate,
T.name_customer
FROM Seller AS S
JOIN Customer AS T ON T.id_customer = S.id_seller
WHERE S.id_product = C.id) AS P
但我沒有得到正確的結果。我想要如下所示的結果:
name_product | product_placement_date | name_customer
-----------------------------------------------------
apple | 2020-01-06 | Alice
orange | 2020-01-04 | Soul
juice | 2020-01-05 | Katy
請指教
uj5u.com熱心網友回復:
看起來您可能對賣家表有疑問。賣家 ID 似乎是客戶表的外鍵。這表明您永遠不會允許賣家在任何其他日期出售任何其他商品......除非該表的主鍵是賣家 ID、出售的商品和日期,從而拉動所有 3 列。我希望“Seller”表真的是一個“SellING”表,并且更多的是一個背景關系
SellingID (PK) | id_seller | id_product | product_placement_date
---------------------------------------------------
1 | 45 | 3 | 2020-01-09
2 | 46 | 3 | 2020-01-05
3 | 58 | 2 | 2020-02-08
4 | 49 | 2 | 2020-01-04
5 | 43 | 1 | 2020-01-06
下一個考慮是如果兩個或更多人在同一天銷售橙子并上市怎么辦。在您的原件上,您不知道誰首先列出了他們的產品……或者您是否希望所有在最早日期列出其產品的人。您可以同時顯示這兩個名稱。通過將這個帶有“sellingid”列的“銷售”表作為自動增量,您將能夠知道誰首先基于給定產品的最早 SELLINGID,因為有人必須首先提交他們的記錄,即使在同一天。然后你可能會得到類似的東西
select
p.name_product,
S2.product_placement_date,
c.name_customer
from
( select id_product,
min( sellingid ) as FirstListedID
from
selling
group by
id_product ) First
join selling S2
on First.FirstListedID = s2.sellingID
join customer c
on S2.id_seller = c.id_customer
join product p
on S2.id_product = p.id
在這里,對別名“First”的銷售活動的預查詢表示具有第一個銷售 ID 實體的所有產品的單個串列,無論日期如何,根據解釋原因并在多人提供的情況下使用自動增量在同一天。
完成后,重新加入第一個“ID”上的原始銷售表。然后,您可以與產品和客戶聯系以獲取最終詳細資訊。
uj5u.com熱心網友回復:
SELECT P.name_product,
S.product_placement_date,
S.name_customer
FROM Product AS P
CROSS APPLY(SELECT TOP 1 S.product_placement_date,
C.name_customer
FROM Seller AS S
INNER JOIN Customer AS C ON C.id_customer = S.id_seller
WHERE S.id_product = P.id
ORDER BY S.product_placement_date) AS S
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/417306.html
標籤:
上一篇:更改繼承方法的型別提示
