首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找与SQL server中的最大列匹配的值。

查找与SQL server中的最大列匹配的值。
EN

Stack Overflow用户
提问于 2016-11-12 05:29:29
回答 3查看 42关注 0票数 1

我有一个表,其中包含最大月数列,如下所示:

代码语言:javascript
复制
   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

我还有另一个包含月数列的表,如下图所示:

代码语言:javascript
复制
  User #months   Category
    A     1        X
    B     5        X
    C     6        y
    D     12       y
    E     15       X  

我如何编写一条case语句,根据第二个表中的#个月显示用户的标题是什么?

例如,它需要显示用户A的标题是初学者-1。我可以使用category列连接这些表,但是很难使用maxMonths匹配#个月

EN

回答 3

Stack Overflow用户

发布于 2016-11-12 07:44:16

此查询查找适用于每个用户/类别的maxMonths:

代码语言:javascript
复制
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

然后,您可以轻松地获取标题:

代码语言:javascript
复制
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;
票数 0
EN

Stack Overflow用户

发布于 2016-11-12 08:43:01

使用以下查询

代码语言:javascript
复制
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
)
票数 0
EN

Stack Overflow用户

发布于 2017-09-07 04:36:20

以下是临时表中的示例数据:

代码语言:javascript
复制
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

您可以使用以下查询来获取您正在寻找的内容。

代码语言:javascript
复制
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作为列名。您应该避免在生产环境中使用它,因为它是一个保留关键字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40556495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档