ID name value
----------- ---------- --------
2014000 A 1
2014000 B 2
2014001 C 3
2014002 D 4
2014002 E 5
期望结果:
ID name1 value1 name2 value2
----------- --------- --------- --------- ---------
2014000 A 1 B 2
2014001 C 3 null null
2014002 D 4 E 5
注意:查询效率上要求比较快
11 个解决方案
#1
SELECT
ID,MIN(name) AS name1,MIN(value) AS value1,MAX(name) AS name2,MAX(value) AS value2
FROM
TABLENAME
GROUP BY
ID
#2
之前的回复是我考虑不周,以这个为准
SELECT
ID,MIN(name) AS name1,MIN(value) AS value1,
CASE COUNT(ID) = 1 THEN NULL ELSE MAX(name) END AS name2,
CASE COUNT(ID) = 1 THEN NULL ELSE MAX(value) END AS value2
FROM
TABLENAME
GROUP BY
ID
#3
我真不是故意的,用记事本写SQL就是天生会出错。。。
SELECT
ID,MIN(name) AS name1,MIN(value) AS value1,
CASE COUNT(ID) WHEN 1 THEN NULL ELSE MAX(name) END AS name2,
CASE COUNT(ID) WHEN 1 THEN NULL ELSE MAX(value) END AS value2
FROM
TABLENAME
GROUP BY
ID
#4
ID name1 value1 name2 value2
----------- --------- --------- --------- ---------
2014000 A 2 B 1
2014001 C 3 null null
2014002 D 5 E 4
为什么查出来数据结果不对 ,应该是
ID name1 value1 name2 value2
----------- --------- --------- --------- ---------
2014000 A 1 B 2
2014001 C 3 null null
2014002 D 4 E 5
----------- --------- --------- --------- ---------
2014000 A 2 B 1
2014001 C 3 null null
2014002 D 5 E 4
为什么查出来数据结果不对 ,应该是
ID name1 value1 name2 value2
----------- --------- --------- --------- ---------
2014000 A 1 B 2
2014001 C 3 null null
2014002 D 4 E 5
#5
我怀疑你的value列中有空格或者特殊字符,针对有空格的情况如下处理
/*
2014000 A 1
2014000 B 2
2014001 C 3
2014002 D 4
2014002 E 5
*/
CREATE TABLE # (ID INT,NAME CHAR(1),VALUE VARCHAR(10))
INSERT INTO # VALUES
(2014000,'A','1'),
(2014000,'B',' 2'),
(2014001,'C','3'),
(2014002,'D','4'),
(2014002,'E','5')
SELECT
ID,MIN(name) AS name1,MIN(REPLACE(value,' ','')) AS value1,
CASE COUNT(ID) WHEN 1 THEN NULL ELSE MAX(name) END AS name2,
CASE COUNT(ID) WHEN 1 THEN NULL ELSE MAX(REPLACE(value,' ','')) END AS value2
FROM
#
GROUP BY
ID
#6
什么数据库?
同1个ID最多只2条记录?会不会出现name或value相同的情况?
同1个ID最多只2条记录?会不会出现name或value相同的情况?
#7
谢谢了,好了,请问下为什么要给加MIN和MAX函数
#8
name不会,但是value会有相同的,这种情况会有问题?
#9
mysql数据库
#10
应该说你描述的不够准确,你想要达到什么目的没有说明白
每组相同的ID最多会有几个,如果有N列,结果集是否需要2N+1列还是仅仅要求5列?
所以我就按照你的题面最简意思来写的SQL
即如此理解:结果集的5列分别理解为ID,name的最小值,value的最小值,name的最大值,value的最大值
每组相同的ID最多会有几个,如果有N列,结果集是否需要2N+1列还是仅仅要求5列?
所以我就按照你的题面最简意思来写的SQL
即如此理解:结果集的5列分别理解为ID,name的最小值,value的最小值,name的最大值,value的最大值
#11
如果同一个id大于2条记录怎么写呢
#1
SELECT
ID,MIN(name) AS name1,MIN(value) AS value1,MAX(name) AS name2,MAX(value) AS value2
FROM
TABLENAME
GROUP BY
ID
#2
之前的回复是我考虑不周,以这个为准
SELECT
ID,MIN(name) AS name1,MIN(value) AS value1,
CASE COUNT(ID) = 1 THEN NULL ELSE MAX(name) END AS name2,
CASE COUNT(ID) = 1 THEN NULL ELSE MAX(value) END AS value2
FROM
TABLENAME
GROUP BY
ID
#3
我真不是故意的,用记事本写SQL就是天生会出错。。。
SELECT
ID,MIN(name) AS name1,MIN(value) AS value1,
CASE COUNT(ID) WHEN 1 THEN NULL ELSE MAX(name) END AS name2,
CASE COUNT(ID) WHEN 1 THEN NULL ELSE MAX(value) END AS value2
FROM
TABLENAME
GROUP BY
ID
#4
ID name1 value1 name2 value2
----------- --------- --------- --------- ---------
2014000 A 2 B 1
2014001 C 3 null null
2014002 D 5 E 4
为什么查出来数据结果不对 ,应该是
ID name1 value1 name2 value2
----------- --------- --------- --------- ---------
2014000 A 1 B 2
2014001 C 3 null null
2014002 D 4 E 5
----------- --------- --------- --------- ---------
2014000 A 2 B 1
2014001 C 3 null null
2014002 D 5 E 4
为什么查出来数据结果不对 ,应该是
ID name1 value1 name2 value2
----------- --------- --------- --------- ---------
2014000 A 1 B 2
2014001 C 3 null null
2014002 D 4 E 5
#5
我怀疑你的value列中有空格或者特殊字符,针对有空格的情况如下处理
/*
2014000 A 1
2014000 B 2
2014001 C 3
2014002 D 4
2014002 E 5
*/
CREATE TABLE # (ID INT,NAME CHAR(1),VALUE VARCHAR(10))
INSERT INTO # VALUES
(2014000,'A','1'),
(2014000,'B',' 2'),
(2014001,'C','3'),
(2014002,'D','4'),
(2014002,'E','5')
SELECT
ID,MIN(name) AS name1,MIN(REPLACE(value,' ','')) AS value1,
CASE COUNT(ID) WHEN 1 THEN NULL ELSE MAX(name) END AS name2,
CASE COUNT(ID) WHEN 1 THEN NULL ELSE MAX(REPLACE(value,' ','')) END AS value2
FROM
#
GROUP BY
ID
#6
什么数据库?
同1个ID最多只2条记录?会不会出现name或value相同的情况?
同1个ID最多只2条记录?会不会出现name或value相同的情况?
#7
谢谢了,好了,请问下为什么要给加MIN和MAX函数
#8
name不会,但是value会有相同的,这种情况会有问题?
#9
mysql数据库
#10
应该说你描述的不够准确,你想要达到什么目的没有说明白
每组相同的ID最多会有几个,如果有N列,结果集是否需要2N+1列还是仅仅要求5列?
所以我就按照你的题面最简意思来写的SQL
即如此理解:结果集的5列分别理解为ID,name的最小值,value的最小值,name的最大值,value的最大值
每组相同的ID最多会有几个,如果有N列,结果集是否需要2N+1列还是仅仅要求5列?
所以我就按照你的题面最简意思来写的SQL
即如此理解:结果集的5列分别理解为ID,name的最小值,value的最小值,name的最大值,value的最大值
#11
如果同一个id大于2条记录怎么写呢