我是 SQL 查詢的新手,任何人都可以幫助我進行此查詢,我在下面有兩個表,需要加入這些表的位置,這樣假設我在同一日期有兩個 Etype,則首選必須是 Etype B 而不是 A,如果沒有 B 然后只取 A
表格1
| ID | 地點 |
|---|---|
| 1 | 美國 |
| 2 | 英國 |
表2
| 地點 | 日期 | 電子型別 |
|---|---|---|
| 美國 | 2021-01-01 | 一種 |
| 美國 | 2021-01-01 | 乙 |
| 英國 | 2021-02-03 | 乙 |
預期結果如下:
| ID | 地點 | 日期 | 電子型別 |
|---|---|---|---|
| 1 | 美國 | 2021-01-01 | 乙 |
| 2 | 英國 | 2021-02-03 | 乙 |
uj5u.com熱心網友回復:
您可以使用簡單的聚合,假設您只有兩種型別A,并且B對于 Etype
SELECT t1.id, t2.location, t2.date, MAX(t2.Etype)
FROM [table1] AS t1
JOIN [table2] AS t2
ON t2.location = t1.location
GROUP BY t2.id, t2.location, t2.date
uj5u.com熱心網友回復:
如果您需要消除聯系,或者有兩個以上Etypes,或者它們在現實生活中實際上不是按字母順序排列的,或者您有其他列您沒有提到您不能或不想聚合:
;WITH loc AS
(
SELECT location, date, Etype,
rn = ROW_NUMBER() OVER (PARTITION BY location, date
ORDER BY CASE Etype WHEN 'B' THEN 1
WHEN 'A' THEN 2
-- other conditions
END)
FROM dbo.table2
)
SELECT t1.Id, t1.location, loc.date, loc.Etype
FROM loc
INNER JOIN dbo.table1 AS t1
ON loc.location = t1.location
AND loc.rn = 1;
- 示例db<>fiddle
uj5u.com熱心網友回復:
SELECT T.ID,T.LOCATION,X.DATE,MAX(ETYPE)MAX_ETYPE
FROM TABLE_1 AS T
JOIN TABLE_2 AS X ON T.LOCATION=X.LOCATION
GROUP BY T.ID,T.LOCATION,X.DATE
你能試試上面的嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/459015.html
