我有一个表,其中包含最大月数列,如下所示:
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 我如何编写一条case语句,根据第二个表中的#个月显示用户的标题是什么?
例如,它需要显示用户A的标题是初学者-1。我可以使用category列连接这些表,但是很难使用maxMonths匹配#个月
发布于 2016-11-12 07:44:16
此查询查找适用于每个用户/类别的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;发布于 2016-11-12 08:43:01
使用以下查询
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
)发布于 2017-09-07 04:36:20
以下是临时表中的示例数据:
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略高于实际月份
笔记:我不确定你是想要一个月= maxMonth的匹配来提升一个级别还是保持下降。我假定是后者,不过您可以通过将嵌套查询中的>=更改为>来更改它
此外,您还使用USER作为列名。您应该避免在生产环境中使用它,因为它是一个保留关键字。
https://stackoverflow.com/questions/40556495
复制相似问题