在SQL server中查找与max列匹配的值
我有一个表,其中包含“最大月数”列,如下所示:在SQL server中查找与max列匹配的值,sql,sql-server,max,case-statement,Sql,Sql Server,Max,Case Statement,我有一个表,其中包含“最大月数”列,如下所示: Category MaxMonths Title X 3 Beginner-1 X 6 Intermediate-1 X 12 Avance-1 X 999 Master-1 Y 3 Beginner-2 Y 6
Category MaxMonths Title
X 3 Beginner-1
X 6 Intermediate-1
X 12 Avance-1
X 999 Master-1
Y 3 Beginner-2
Y 6 Intermediate-2
Y 12 Avance-2
Y 999 Master-2
User #months Category
A 1 X
B 5 X
C 6 y
D 12 y
E 15 X
我还有另一个表,其中有一个月数列,如下所示:
Category MaxMonths Title
X 3 Beginner-1
X 6 Intermediate-1
X 12 Avance-1
X 999 Master-1
Y 3 Beginner-2
Y 6 Intermediate-2
Y 12 Avance-2
Y 999 Master-2
User #months Category
A 1 X
B 5 X
C 6 y
D 12 y
E 15 X
我如何编写一个案例陈述,根据第二个表中的#月显示用户的标题
例如,它需要显示用户A的标题是初学者-1。我可以使用category列连接表,但很难将#months与maxMonths匹配此查询查找适用于每个用户/类别的maxMonths:
select t2.[User], t2.category, min(t1.maxMonths) as maxMonths
from table1 t1
inner join table2 t2 on t1.category = t2.category
and t1.maxMonths >= t2.months
group by t2.[User], t2.category
然后,您可以轻松获得标题:
select r1.[User], r2.Title
from
(select t2.[User], t2.category, min(t1.maxMonths) as maxMonths
from table1 t1
inner join table2 t2 on t1.category = t2.category
and t1.maxMonths >= t2.months
group by t2.[User], t2.category) r1
inner join table1 r2 on r2.category = r1.category and r2.maxMonths = r1.maxMonths;
此查询查找适用于每个用户/类别的maxMonths:
select t2.[User], t2.category, min(t1.maxMonths) as maxMonths
from table1 t1
inner join table2 t2 on t1.category = t2.category
and t1.maxMonths >= t2.months
group by t2.[User], t2.category
然后,您可以轻松获得标题:
select r1.[User], r2.Title
from
(select t2.[User], t2.category, min(t1.maxMonths) as maxMonths
from table1 t1
inner join table2 t2 on t1.category = t2.category
and t1.maxMonths >= t2.months
group by t2.[User], t2.category) r1
inner join table1 r2 on r2.category = r1.category and r2.maxMonths = r1.maxMonths;
使用以下查询
Select
T1.User,
T2.Title
from table1 T1
inner join table2 T2 on t1.category = t2.category
Where t2.MaxMonthes = (
Select
min(MaxMonthes)
from table1 T3
Where T3.maxmonthes >= T2.[#months]
and T2.category = T3.category
)
使用以下查询
Select
T1.User,
T2.Title
from table1 T1
inner join table2 T2 on t1.category = t2.category
Where t2.MaxMonthes = (
Select
min(MaxMonthes)
from table1 T3
Where T3.maxmonthes >= T2.[#months]
and T2.category = T3.category
)
以下是临时表中的示例数据:
CREATE TABLE #title(
category CHAR(1)
,maxMonths INT
,title VARCHAR(25)
)
GO
CREATE TABLE #months(
[user] CHAR(1)
,months INT
,category CHAR(1)
)
GO
INSERT INTO #title VALUES
('X',3 ,'Beginner-1')
,('X',6 ,'Intermediate-1')
,('X',12 ,'Avance-1')
,('X',999,'Master-1')
,('Y',3 ,'Beginner-2')
,('Y',6 ,'Intermediate-2')
,('Y',12 ,'Avance-2')
,('Y',999,'Master-2')
GO
INSERT INTO #months VALUES
('A',1 ,'X')
,('B',5 ,'X')
,('C',6 ,'y')
,('D',12,'y')
,('E',15,'X')
GO
您可以使用以下查询来获取所需内容
SELECT
#months.[user]
,#months.months
,#months.category
,#title.title
FROM #title
INNER JOIN #months ON #title.category = #months.category
WHERE #title.maxmonths = (
SELECT
MIN(maxmonths)
FROM #title
WHERE maxmonths >= #months.months
)
解释:嵌套查询会将结果限制为仅包含maxMonths略高于实际月份的标题
注意事项:我不确定你是想让months=maxMonth的比赛上升一个级别,还是让它下降一个级别。我假设是后者,不过您可以通过将嵌套查询中的=
更改为
此外,还使用了
USER
作为列名。您应该避免在生产环境中使用它,因为它是一个保留关键字。以下是临时表中的示例数据:
CREATE TABLE #title(
category CHAR(1)
,maxMonths INT
,title VARCHAR(25)
)
GO
CREATE TABLE #months(
[user] CHAR(1)
,months INT
,category CHAR(1)
)
GO
INSERT INTO #title VALUES
('X',3 ,'Beginner-1')
,('X',6 ,'Intermediate-1')
,('X',12 ,'Avance-1')
,('X',999,'Master-1')
,('Y',3 ,'Beginner-2')
,('Y',6 ,'Intermediate-2')
,('Y',12 ,'Avance-2')
,('Y',999,'Master-2')
GO
INSERT INTO #months VALUES
('A',1 ,'X')
,('B',5 ,'X')
,('C',6 ,'y')
,('D',12,'y')
,('E',15,'X')
GO
您可以使用以下查询来获取所需内容
SELECT
#months.[user]
,#months.months
,#months.category
,#title.title
FROM #title
INNER JOIN #months ON #title.category = #months.category
WHERE #title.maxmonths = (
SELECT
MIN(maxmonths)
FROM #title
WHERE maxmonths >= #months.months
)
解释:嵌套查询会将结果限制为仅包含maxMonths略高于实际月份的标题
注意事项:我不确定你是想让months=maxMonth的比赛上升一个级别,还是让它下降一个级别。我假设是后者,不过您可以通过将嵌套查询中的=
更改为
此外,还使用了USER
作为列名。您应该避免在生产环境中使用它,因为它是一个保留关键字