如何使用sql获得所需的输出

时间:2017-01-06 11:30:29

标签: sql sql-server select

我的数据库表格如下所示

IDCol    Col1    Col2    Col3
ID1      1       3       1000
ID1      6       6       1000
ID2      3       4       500
ID2      1       7       500

我需要输出如下

IDCol    Col1    Col2    Col3
ID1      1       6       1000
ID2      3       7       500

我是否有可能使用SQL获得上述所需的输出格式? 我是SQL的新手,有人可以帮帮我吗?非常感谢你!

3 个答案:

答案 0 :(得分:2)

根据您的样本数据,我相信您正在寻找:

SELECT IDCol
    , MIN(Col1)    AS [Col1]
    , MAX(Col2)    AS [Col2]
    , Col3
FROM Table
GROUP BY IDCol
    , Col3

根据您评论中的信息,如果您添加行号列,则其中一个解决方案将采用以下形式:

select t1.idcol
    , t1.col1
    , t2.col2
    , t1.col3
from 
(select idcol
    , min(rn) over (partition by idcol) first_val
    , max(rn) over (partition by idcol) last_val
from table
group by idcol, rn) r
    inner join table t1 on r.first_val = t1.rn
        and r.idcol = t1.idcol
    inner join table t2 on r.last_val = t2.rn
        and r.idcol = t2.idcol
group by t1.idcol
    , t1.col1
    , t2.col2
    , t1.col3

在示例数据上运行示例代码:

declare @tbl table (rn int identity(1,1), idcol varchar(4), col1 int, col2 int, col3 int)
insert @tbl values ('id1', 1, 3, 1000)
    , ('id1', 6, 6, 1000)
    , ('id2', 3, 4, 500)
    , ('id2', 1, 7, 500);


select t1.idcol
    , t1.col1
    , t2.col2
    , t1.col3
from 
(select idcol
    , min(rn) over (partition by idcol) first_val
    , max(rn) over (partition by idcol) last_val
from @tbl
group by idcol, rn) r
    inner join @tbl t1 on r.first_val = t1.rn
        and r.idcol = t1.idcol
    inner join @tbl t2 on r.last_val = t2.rn
        and r.idcol = t2.idcol
group by t1.idcol
    , t1.col1
    , t2.col2
    , t1.col3

答案 1 :(得分:1)

使用<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> (2012年支持)尝试的另一种方式:

LEAD

答案 2 :(得分:-1)

我认为您必须为此任务指定抽象级别。您可以使用许多语句来实现此输出。问题是数据行代表什么以及为什么要求预期的输出。