簡體   English   中英

SQL:GROUP BY有一欄

[英]SQL: GROUP BY with one column

我有一張這樣的桌子:

name    id1     id2     id3     id4
Mark    aaa     null    null    null
Mark    null    bbb     null    null
Mark    null    null    null    null
John    null    null    eee     null
John    ccc     null    null    null
John    null    ddd     null    null
John    null    null    null    null

所以,我有5列,分別是name,id1,id2,id3和id4-所有都是字符串值。 我只需要為GROUP BY命名即可; 它將具有除空值以外的所有值。 因此,最終輸出將如下所示:

    name    id1     id2     id3     id4
    Mark    aaa     bbb     null    null
    John    ccc     ddd     eee     null

誰能幫我做到這一點?

使用MAX

SELECT
    name,
    MAX(id1) AS id1,
    MAX(id2) AS id2,
    MAX(id3) AS id3,
    MAX(id4) AS id4
FROM tbl
GROUP BY name;

使用這樣的東西:

select 
  name,
  max(id1) id1,
  max(id2) id2,
 max(id3) id3,
  max(id4) id4
from
(
  select name, id1, id2, id3, id4,
    row_number() over(partition by name
                      order by name) seq
  from yourtable
) d
group by name

字符串上的最大值... Z大於A。任何字符串大於null。 不要忘記GROUP BY

create table #test(
name varchar(10),
id1 varchar(10),
id2 varchar(10),
id3 varchar(10),
id4 varchar(10)
)

INSERT INTO #test SELECT 'Mark', 'aaa', null, null, null;
INSERT INTO #test SELECT 'Mark', null, 'bbb', null, null;
INSERT INTO #test SELECT 'Mark', null, null, null, null
INSERT INTO #test SELECT 'John', null, null, 'eee', null
INSERT INTO #test SELECT 'John', 'ccc', null, null, null
INSERT INTO #test SELECT 'John', null, 'ddd', null, null
INSERT INTO #test SELECT 'John', null, null, null, null

SELECT
    name,
    MAX(id1) AS id1,
    MAX(id2) AS id2,
    MAX(id3) AS id3,
    MAX(id4) AS id4
FROM #test
Group By name

drop table #test

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM