I am new to SQL queries ,could any one help me on this query, I have two tables below , need to join these tables location such that suppose I have both Etype on a same date the preference must be for Etype B over A, if there is not B then only fetch A
Table1
| Id | location |
|---|---|
| 1 | usa |
| 2 | uk |
Table2
| location | date | Etype |
|---|---|---|
| usa | 2021-01-01 | A |
| usa | 2021-01-01 | B |
| uk | 2021-02-03 | B |
Result is expected like:
| Id | location | date | Etype |
|---|---|---|---|
| 1 | usa | 2021-01-01 | B |
| 2 | uk | 2021-02-03 | B |
CodePudding user response:
In case you need to eliminate ties, or there are more than two Etypes, or they are not actually alphabetical in real life, or you have other columns you haven't mentioned that you can't or don't want to aggregate:
;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;
- Example db<>fiddle
CodePudding user response:
You can use a simple aggregation presuming you only two types A and B for 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
CodePudding user response:
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
Could you please try the above ?
