AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 100899
Accepted
Kin Shah
Kin Shah
Asked: 2015-05-08 08:47:24 +0800 CST2015-05-08 08:47:24 +0800 CST 2015-05-08 08:47:24 +0800 CST

帮助 PIVOT 查询

  • 772

我有一个具有以下结构的表:

CREATE TABLE [dbo].[AUDIT_SCHEMA_VERSION](
    [SCHEMA_VER_MAJOR] [int] NOT NULL,
    [SCHEMA_VER_MINOR] [int] NOT NULL,
    [SCHEMA_VER_SUB] [int] NOT NULL,
    [SCHEMA_VER_DATE] [datetime] NOT NULL,
    [SCHEMA_VER_REMARK] [varchar](250) NULL
);

一些样本数据(sqlfiddle 似乎有问题..所以放一些样本数据):

INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,6,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,7,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,10,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,12,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,12,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,16,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,16,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,16,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,16,13,CAST('20140417 18:10:44.100' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,5,0,CAST('20140417 18:14:14.157' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,6,0,CAST('20140417 18:14:23.327' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,7,0,CAST('20140417 18:14:32.270' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,8,0,CAST('20141209 09:38:40.700' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,9,0,CAST('20141209 09:43:04.237' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,10,0,CAST('20141209 09:45:19.893' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,13,0,CAST('20150323 14:54:30.847' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,10,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,16,14,CAST('20140417 18:11:07.977' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,16,15,CAST('20140417 18:11:13.130' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,2,0,CAST('20140417 18:12:11.200' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,3,0,CAST('20140417 18:12:33.330' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,4,0,CAST('20140417 18:12:48.803' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,13,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(1,16,13,CAST('20130405 04:41:25.000' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,11,0,CAST('20141209 09:45:58.993' as DATETIME),'Stored procedure build')
INSERT INTO [AUDIT_SCHEMA_VERSION]([SCHEMA_VER_MAJOR],[SCHEMA_VER_MINOR],[SCHEMA_VER_SUB],[SCHEMA_VER_DATE],[SCHEMA_VER_REMARK])
VALUES(2,12,0,CAST('20141209 09:46:50.070' as DATETIME),'Stored procedure build');

这是SQLFiddle一些示例数据。

具有 T-sql 专业知识的人可以指导我如何实现最终结果吗?我知道PIVOT(使用动态列)将是正确的方法,但无法弄清楚。

预期成绩 :

在此处输入图像描述

到目前为止,我有以下内容:

select row_number() over (
        partition by CONVERT(varchar(10), SCHEMA_VER_DATE, 110) order by SCHEMA_VER_DATE 
        ) as rownum
    ,CONVERT(varchar(10), SCHEMA_VER_DATE, 110) as UPG_DATE
    ,CONVERT(varchar(1), SCHEMA_VER_MAJOR) + '.' + CONVERT(varchar(2), SCHEMA_VER_MINOR) + '.' + CONVERT(varchar(2), SCHEMA_VER_SUB) as SCHEMA_VER
from audit_schema_version
where SCHEMA_VER_REMARK like 'Stored procedure build'
order by UPGRADE_DATE 

在此处输入图像描述

sql-server sql-server-2008-r2
  • 2 2 个回答
  • 768 Views

2 个回答

  • Voted
  1. Best Answer
    Taryn
    2015-05-08T11:48:26+08:002015-05-08T11:48:26+08:00

    获得最终结果有点混乱,因为SCHEMA_VER每个日期都有多个。在演示如何使用动态 SQL 执行此操作之前,我将首先演示如何使用静态代码执行此操作以使逻辑正确。为了获得最终结果,您可以同时使用 pivot 和 unpivot。

    但首先,我会将您的原始查询更改为使用以下内容:

    select 
        row_number() over (
        partition by CONVERT(varchar(10), SCHEMA_VER_DATE, 110) order by SCHEMA_VER_MAJOR, SCHEMA_VER_MINOR, SCHEMA_VER_SUB
        ) as minrownum
    , row_number() over (
        partition by CONVERT(varchar(10), SCHEMA_VER_DATE, 110) order by SCHEMA_VER_MAJOR desc, SCHEMA_VER_MINOR desc, SCHEMA_VER_SUB desc
        ) as maxrownum
    ,CONVERT(varchar(10), SCHEMA_VER_DATE, 110) as UPG_DATE
    ,CONVERT(varchar(1), SCHEMA_VER_MAJOR) + '.' + CONVERT(varchar(2), SCHEMA_VER_MINOR) + '.' + CONVERT(varchar(2), SCHEMA_VER_SUB) as SCHEMA_VER
    from audit_schema_version
    where SCHEMA_VER_REMARK like 'Stored procedure build';
    

    请参阅带有演示的 SQL Fiddle。我过去常常row_number()得到SCHEMA_VER每个日期的第一个和最后一个。这是必需的,因此您可以仅将这些值连接在一起以进行评论。

    然后我将使用一个临时表来存储具有 aminrownum和maxrownum1 的行。临时表将包含 theupg_date和 the comment。此注释列包含SCHEMA_VER每个日期的一对的串联字符串。

    create table #srcData
    (
        upg_date varchar(10),
        comment varchar(500)
    );
    

    填充临时表的代码将是:

    ;with cte as
    (
      select 
            row_number() over (
            partition by CONVERT(varchar(10), SCHEMA_VER_DATE, 110) order by SCHEMA_VER_MAJOR, SCHEMA_VER_MINOR, SCHEMA_VER_SUB
            ) as minrownum
        , row_number() over (
            partition by CONVERT(varchar(10), SCHEMA_VER_DATE, 110) order by SCHEMA_VER_MAJOR desc, SCHEMA_VER_MINOR desc, SCHEMA_VER_SUB desc
            ) as maxrownum
        ,CONVERT(varchar(10), SCHEMA_VER_DATE, 110) as UPG_DATE
        ,CONVERT(varchar(1), SCHEMA_VER_MAJOR) + '.' + CONVERT(varchar(2), SCHEMA_VER_MINOR) + '.' + CONVERT(varchar(2), SCHEMA_VER_SUB) as SCHEMA_VER
      from audit_schema_version
      where SCHEMA_VER_REMARK like 'Stored procedure build'
    )
    insert into #srcData
    select distinct
        c1.UPG_DATE,
        comment 
            = STUFF((
                      SELECT ' - ' + c2.SCHEMA_VER 
                      FROM cte c2
                      WHERE (c2.minrownum = 1 or c2.maxrownum = 1)
                        and c1.upg_date = c2.upg_date
                      order by c2.minrownum
                      FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '') 
    from cte c1
    where c1.minrownum = 1 or c1.maxrownum = 1;
    

    这第一次通过你的数据让你:

    |   upg_date |           comment |
    |------------|-------------------|
    | 03-23-2015 |            2.13.0 |
    | 04-05-2013 |  1.6.13 - 1.16.13 |
    | 04-17-2014 |   1.16.13 - 2.7.0 |
    | 12-09-2014 |    2.8.0 - 2.12.0 |
    

    现在您仍然需要计算一年中每个日期的计数和完整的串联评论。这就是 unpivot 发挥作用的地方。您可以使用以下代码为每年创建完整评论并获取计数。

    select distinct 
        Yr =  right(s1.upg_date, 4),
        cnt = count(*) over(partition by right(s1.upg_date, 4)),
        fullcomment 
                = STUFF((
                          SELECT '; ' + s2.comment 
                          FROM #srcData s2
                          WHERE right(s1.upg_date, 4) = right(s2.upg_date, 4)
                          FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '') 
    from #srcData s1;
    

    请参阅带有演示的 SQL Fiddle。数据现在看起来像:

    |   Yr | cnt |                       fullcomment |
    |------|-----|-----------------------------------|
    | 2013 |   1 |                  1.6.13 - 1.16.13 |
    | 2014 |   2 |  1.16.13 - 2.7.0;  2.8.0 - 2.12.0 |
    | 2015 |   1 |                            2.13.0 |
    

    如您所见,您有多个需要旋转的列,因此您可以将fullcomment和cnt列取消旋转为多行。这可以使用 UNPIVOT 函数或 CROSS APPLY 来完成。我更喜欢在这里交叉应用,因为您需要将值连接在一起以创建新的列名称:

    ;with cte as
    (
        select distinct 
            Yr =  right(s1.upg_date, 4),
            cnt = count(*) over(partition by right(s1.upg_date, 4)),
            fullcomment 
                    = STUFF((
                              SELECT '; ' + s2.comment 
                              FROM #srcData s2
                              WHERE right(s1.upg_date, 4) = right(s2.upg_date, 4)
                              FOR XML PATH(''), TYPE).value('.[1]', 'nvarchar(max)'), 1, 2, '') 
        from #srcData s1
    ) 
    select [2015], [2015_comment], [2014], [2014_comment], [2013], [2013_comment]
    from
    (
        select c.col, val
        from cte d
        cross apply
        (
            values 
                (Yr, cast(cnt as nvarchar(50))),
                (Yr+'_comment', fullcomment)
        ) c (col, val)  
    ) d
    pivot
    (
        max(val)
        for col in ([2015], [2015_comment], [2014], [2014_comment], [2013], [2013_comment])
    ) piv;
    

    请参阅带有演示的 SQL Fiddle。

    获得逻辑后,您可以轻松地将其转换为动态 SQL。

    -- get list of the columns
    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    
    select @cols = STUFF((SELECT  ',' + QUOTENAME(col) 
                        from #srcData
                        cross apply
                        (
                            select right(upg_date, 4), right(upg_date, 4), 2 union all
                            select right(upg_date, 4), right(upg_date, 4)+'_comment', 1
                        ) c (yr, col, so)
                        group by yr, col, so
                        order by yr desc, so desc
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query 
        = 'SELECT ' + @cols + ' 
            from 
            (
                select c.col, val
                from
                (
                    select distinct 
                        Yr =  right(s1.upg_date, 4),
                        cnt = count(*) over(partition by right(s1.upg_date, 4)),
                        fullcomment 
                                = STUFF((
                                          SELECT ''; '' + s2.comment 
                                          FROM #srcData s2
                                          WHERE right(s1.upg_date, 4) = right(s2.upg_date, 4)
                                          FOR XML PATH(''''), TYPE).value(''.[1]'', ''nvarchar(max)''), 1, 2, '''') 
                    from #srcData s1
                ) d
                cross apply
                (
                    values 
                        (Yr, cast(cnt as nvarchar(50))),
                        (Yr+''_comment'', fullcomment)
                ) c (col, val)  
            ) x
            pivot 
            (
               max(val)
               for col in (' + @cols + ')
            ) p '
    
    exec sp_executesql @query;
    

    请参阅带有演示的 SQL Fiddle。两个版本都会给你结果:

    | 2015 | 2015_comment | 2014 |                      2014_comment | 2013 |      2013_comment |
    |------|--------------|------|-----------------------------------|------|-------------------|
    |    1 |       2.13.0 |    2 |  1.16.13 - 2.7.0;  2.8.0 - 2.12.0 |    1 |  1.6.13 - 1.16.13 |
    
    • 20
  2. JoseTeixeira
    2015-05-08T12:00:02+08:002015-05-08T12:00:02+08:00

    添加解释和小提琴:http ://sqlfiddle.com/#!6/c92b2/5 。

    下面的查询:
    1. 使用子查询按日期选择最小和最大版本(最小和最大应用于整数以保证例如 6 < 16)
    2. 然后选择年份(稍后分组),日期(到顺序)和最小 - 最大版本

    SELECT LEFT(UPG_DATE, 4) AS Year
        , UPG_DATE
        , CONVERT(varchar(1), MIN_VER/1000000) + '.' + CONVERT(varchar(2), (MIN_VER/1000 - (MIN_VER/1000000)*1000)) + '.' + CONVERT(varchar(2), MIN_VER%1000)
            + ' - ' + CONVERT(varchar(1), MAX_VER/1000000) + '.' + CONVERT(varchar(2), (MAX_VER/1000 - (MAX_VER/1000000)*1000)) + '.' + CONVERT(varchar(2), MAX_VER%1000) AS Versions
    INTO #Versions
    FROM (
        SELECT CONVERT(varchar(10), SCHEMA_VER_DATE, 112) as UPG_DATE
            , MIN(SCHEMA_VER_MAJOR*1000000 + SCHEMA_VER_MINOR*1000 + SCHEMA_VER_SUB) AS MIN_VER
            , MAX(SCHEMA_VER_MAJOR*1000000 + SCHEMA_VER_MINOR*1000 + SCHEMA_VER_SUB) AS MAX_VER
        FROM audit_schema_version
        WHERE SCHEMA_VER_REMARK like 'Stored procedure build'
        GROUP BY CONVERT(varchar(10), SCHEMA_VER_DATE, 112)
    ) Versions;
    

    接下来,由于每列将重复(year 和 year_COMMENT),因此选择两列来标识数据。计算日期的数量以了解升级的数量,版本按年份分组,填充以使其全部排成一行。这为我们提供了将用于转换的最终表。

    SELECT Year, Year + '_COMMENT' as Year_COMMENT
        , COUNT(Year) AS Upgrades
        , STUFF((SELECT ' ; ' + SUB.Versions
                    FROM #Versions SUB
                    WHERE SUB.Year = V.Year
                    ORDER BY UPG_DATE ASC
                    FOR XML PATH(''), TYPE
                    ).value('.', 'NVARCHAR(2000)')
                ,1,3,'') Versions
    INTO #GroupedResults
    FROM #Versions V
    GROUP BY Year
    
    SELECT * FROM #GroupedResults
    

    以下是结果:

    | Year | Year_COMMENT | Upgrades | Versions                         |
    |------|--------------|----------|----------------------------------|
    | 2013 | 2013_COMMENT | 1        | 1.6.13 - 1.16.13                 |
    | 2014 | 2014_COMMENT | 2        | 1.16.13 - 2.7.0 ; 2.8.0 - 2.12.0 |
    | 2015 | 2015_COMMENT | 1        | 2.13.0 - 2.13.0                  |
    

    接下来,一个变量填充了列,按照我们想要显示的顺序排列:

    DECLARE @cols VARCHAR(1000),
        @finalQuery VARCHAR(2000)
    
    SELECT @cols = STUFF((SELECT ',' + QUOTENAME(YEAR) + ',' + QUOTENAME(YEAR + '_COMMENT')
                        FROM #GroupedResults
                        GROUP BY YEAR
                        ORDER BY YEAR DESC
                        FOR XML PATH(''), TYPE
                        ).value('.', 'NVARCHAR(2000)')
        ,1,1,'')
    

    最后,下面的查询使用交叉应用,所以我们得到:
    1. col 列填充了 Year 和 Year_COMMENT 值
    2. value 列填充了升级次数,在与年份和版本值对应的行中,在与 Year_COMMENTs 对应的行在
    两个结果列上使用了一个数据透视表,为我们提供了 col(与 Year_COMMENTs 交替的年份)的值(升级次数与版本交替)

    set @finalQuery = N'SELECT ' + @cols + N' from 
                 (
                    select col, value
                    from #GroupedResults
                    cross apply
                    (
                        SELECT CAST(Upgrades AS VARCHAR(200)), Year
                        UNION ALL
                        SELECT CAST(Versions AS VARCHAR(200)), Year_COMMENT
                    ) c (value, col)
                ) x
                pivot 
                (
                    Min(value)
                    for col in (' + @cols + N')
                ) p1
                ; '
    
    EXEC (@finalQuery);
    
    DROP TABLE #Versions;
    DROP TABLE #GroupedResults;
    

    这将返回以下结果:

    | 2015 | 2015_COMMENT    | 2014 | 2014_COMMENT                     | 2013 | 2013_COMMENT     |
    |------|-----------------|------|----------------------------------|------|------------------|
    | 1    | 2.13.0 - 2.13.0 | 2    | 1.16.13 - 2.7.0 ; 2.8.0 - 2.12.0 | 1    | 1.6.13 - 1.16.13 |
    
    • 5

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve