x**l 发帖数: 369 | 1 SQL新手,做PROJECT碰到这样一个问题:
用户给的一个SQL语句
SELECT * FROM a
WHERE col1 = ('DE00000009')
AND (col2 = 'WRA0020' or col2 = 'OO0036' or col2 = 'WRA0019' or col2 = '
OO0033')
返回下列结果:
year col2 col3
2009 OO0033 3440.0000
2009 OO0036 330.0000
2009 WRA0019 259.9360
2009 WRA0020 1756.3800
2010 OO0033 3750.0000
2010 OO0036 375.0000
2010 WRA0019 282.4740
2010 WRA0020 2048.8700
2011 OO0033 4210.0000
2011 OO0036 285.2200
2011 WRA0019 789.3160
2011 WRA0020 2135.9250
现在因为project需求,需要把上面的结果集处理成:
year v1 v2 v3 v4
2009 1756.3800 330.0000 259.9360 3440.0000
2010 2048.8700 375.0000 282.4740 3750.0000
2011 2135.9250 285.2200 789.3160 4210.0000
数据库是mysql,想用subselect,但总报错subquery return more than 1 row,能否请
高手帮看一下应该如何写这个SQL语句才能拿到上面的结果呢? | H*******g 发帖数: 6997 | | f*****e 发帖数: 2992 | 3 前面有一个用行号的应该可以满足要求。
【在 x**l 的大作中提到】 : SQL新手,做PROJECT碰到这样一个问题: : 用户给的一个SQL语句 : SELECT * FROM a : WHERE col1 = ('DE00000009') : AND (col2 = 'WRA0020' or col2 = 'OO0036' or col2 = 'WRA0019' or col2 = ' : OO0033') : 返回下列结果: : year col2 col3 : 2009 OO0033 3440.0000 : 2009 OO0036 330.0000
| b****1 发帖数: 242 | 4 SELECT aaa.year,
MAX(CASE WHEN aaa.col2= 'WRA0020' THEN aaa.col3 ELSE NULL END),
MAX(CASE WHEN aaa.col2= 'OO0036' THEN aaa.col3 ELSE NULL END),
MAX(CASE WHEN aaa.col2= 'WRA0019' THEN aaa.col3 ELSE NULL END),
MAX(CASE WHEN aaa.col2= 'OO0033' THEN aaa.col3 ELSE NULL END),
FROM
(
SELECT * FROM a
WHERE col1 = ('DE00000009') AND (col2 = 'WRA0020' or col2 = 'OO0036' or col2
= 'WRA0019' or col2 = 'OO0033')
) aaa
GROUP BY aaa.year |
|