[英]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.