【问题标题】:Separate distinct values in to columns将不同的值分隔到列中
【发布时间】:2020-05-29 00:45:16
【问题描述】:

大家好,我对 SQL 很陌生。我有一个表(TABLE1),有两列,如下所示

Name age
--------
jim  18
jim  21
dave 18
dave 18
john 23
john 41

我需要在 SSMS 中创建一个视图,在下面的单独列中列出每个名称的不同年龄

Jim  Dave  John
---------------
18   18     23
21          41

我尝试过类似的子查询

SELECT DISTINCT AGE FROM TABLE1 WHERE NAME = JIM

但是我遇到子查询不能返回多个值。

【问题讨论】:

  • 如果后面的行 (Steve, 17) 插入到 table1 中,你是不是突然也想要一个 Steve 列?
  • 是的,这将是一个很好的未来证明

标签: sql sql-server select distinct


【解决方案1】:

你可以使用row_number() & 做聚合:

select max(case when name = 'jim' then age end) as jim,
       max(case when name = 'dave' then age end) as dave,
       max(case when name = 'john' then age end) as john
from (select t.*, row_number() over (partition by name order by age) as seq
      from table t
     ) t
group by seq;

【讨论】:

  • 正如上面@jarlh17 所建议的,我如何编辑此语句以便自动包含添加到表中的任何新名称?
  • 我还有第三列性别我如何添加性别=男性?通过在上述语句的末尾添加 where 子句,它包含性别 = 女性作为 NULL 的记录
  • @Eskifan。 . .您可以在子查询中包含where 子句。如果您有更多名称,那么您可能需要 Dynamic Query。
猜你喜欢
  • 2021-11-01
  • 1970-01-01
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-10
  • 1970-01-01
相关资源
最近更新 更多