首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我希望用datetime升序作为列来选择不同的数字。

我希望用datetime升序作为列来选择不同的数字。
EN

Stack Overflow用户
提问于 2020-05-27 07:45:42
回答 2查看 35关注 0票数 0

有一张桌子

代码语言:javascript
运行
复制
1001  vsp,science,BBA  25-05-2020
1001  vsp,Maths,Btech  26-05-2020
1001  vsp,Maths,Btech  27-05-2020
1002  hyd,science,BBA  24-05-2020
1002  blr,Maths,Btech  25-05-2020

我想要

代码语言:javascript
运行
复制
1001  vsp,science,bba   vsp,Maths,Btech    vsp,Maths,Btech 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-27 08:10:48

你需要一个我最喜欢的组合来实现你的目标:

https://learn.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql

现在解决办法是:

代码语言:javascript
运行
复制
WITH orderedCourse AS
(
    SELECT  GroupId,
            CourseLabel,
            ROW_NUMBER() OVER (PARTITION BY GroupId ORDER BY CourseDate) AS CourseNumber
    FROM @myCourses
)
SELECT TOP (1) GroupId, [1], [2], [3], [4]
FROM    
        (
            SELECT  GroupId,
                    CourseLabel,
                    CourseNumber
            FROM orderedCourse
        ) AS src
        PIVOT
        (
            MIN(CourseLabel) -- default agregate
            FOR CourseNumber IN ([1], [2], [3], [4] /*... if you have more courses by group*/)
        ) AS pvt
ORDER BY GroupId

其结果是:

代码语言:javascript
运行
复制
1001  vsp,science,BBA  vsp,Maths,Btech  vsp,Maths,Btech  NULL

我使用了以下代码来声明表:

代码语言:javascript
运行
复制
INSERT INTO @myCourses
SELECT 1001, 'vsp,science,BBA', CAST('25-05-2020' AS date) UNION ALL
SELECT 1001, 'vsp,Maths,Btech', CAST('26-05-2020' AS date) UNION ALL
SELECT 1001, 'vsp,Maths,Btech', CAST('27-05-2020' AS date) UNION ALL
SELECT 1002, 'yd,science,BBA', CAST('24-05-2020' AS date) UNION ALL
SELECT 1002, 'blr,Maths,Btech', CAST('25-05-2020' AS date);

SELECT  GroupId,
        CourseLabel,
        CourseDate,
        ROW_NUMBER() OVER (PARTITION BY GroupId ORDER BY CourseDate) AS CourseNumber
FROM @myCourses;
票数 1
EN

Stack Overflow用户

发布于 2020-05-27 11:52:40

只需在row_number()中使用条件聚合

代码语言:javascript
运行
复制
select col1,
       max(case when seqnum = 1 then col2 end),
       max(case when seqnum = 2 then col2 end),
       max(case when seqnum = 3 then col2 end)
from (select t.*,
             row_number() over (partition by col1 order by col3) as seqnum
      from t
     ) t
group by col1;

这与字符串聚合无关。它也不需要太多的子查询和CTE。

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

https://stackoverflow.com/questions/62037913

复制
相关文章

相似问题

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