加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 如何在不同的列中选择不同的行值

发布时间:2020-12-12 06:40:24 所属栏目:MsSql教程 来源:网络整理
导读:我有一张桌子. ID Date Value1 12/12/2014 A1 24/12/2014 T2 13/12/2014 A2 23/12/2014 T3 12/03/2014 A3 12/04/2014 T4 12/12/2014 T5 12/04/2014 T 我想要结果,如ADate是值为A的日期,而TDate是值为T的日期 ID ADate TDate1 12/12/2014 24/12/20142 13/12/20
我有一张桌子.
ID  Date         Value
1   12/12/2014   A
1   24/12/2014   T
2   13/12/2014   A
2   23/12/2014   T
3   12/03/2014   A
3   12/04/2014   T
4   12/12/2014   T
5   12/04/2014   T

我想要结果,如ADate是值为A的日期,而TDate是值为T的日期

ID    ADate            TDate
1     12/12/2014      24/12/2014
2     13/12/2014      23/12/2014
3     12/03/2014      12/04/2014
4         -           12/12/2014
5         -           12/04/2014

解决方法

使用条件聚合.试试这个
SELECT id,Min(CASE
             WHEN value = 'A' THEN [Date]
           END) Adate,Max(CASE
             WHEN value = 'T' THEN [Date]
           END) Tdate
FROM   Tablename
GROUP  BY id

更新:获取具有相同ID的行

DECLARE @cnt INT

SELECT TOP 1 @cnt = Count(1) / 2
FROM   #test
GROUP  BY id
ORDER  BY Count(1) / 2 DESC

SELECT id,Max(CASE
             WHEN value = 'T' THEN [Date]
           END) Tdate
FROM   (SELECT Row_number()
                 OVER (
                   partition BY id,value
                   ORDER BY date)%@cnt rn,*
        FROM   #test) a
GROUP  BY id,rn

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读