我在桌子下面。
code type value
===================
100 R 3300
100 B 7900
101 R 6800
100 D 2100
100 C 2300
101 C 1200
当我选择代码= 100时,我希望select语句返回结果。
code Rvalue Bvalue Dvalue Cvalue
==================================
100 3300 7900 2100 2300
我使用内联查询成功实现了这一目标。但我想知道是否有更好的方法来做到这一点。
先谢谢。
答案 0 :(得分:2)
不确定这是否是最好的方法,但它确实有效。使用max()和CASE从一个创建多个列。 Max将始终选择实际值而不是NULL。如果需要,您可以替换0或其他默认值。
SELECT code
,max(CASE
WHEN type = 'r'
THEN value
ELSE NULL
END) RValue
,max(CASE
WHEN type = 'b'
THEN value
ELSE NULL
END) BValue
,max(CASE
WHEN type = 'd'
THEN value
ELSE NULL
END) DValue
,max(CASE
WHEN type = 'c'
THEN value
ELSE NULL
END) CValue
FROM mytable
GROUP BY code
答案 1 :(得分:0)
您可以使用PIVOT运算符。我自己从来没有真正使用它,但我认为它会做你正在尝试做的事情。不太确定它会好得多。
https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx
答案 2 :(得分:0)
使用PIVOT:
SELECT *
FROM
(
<table that gives you current results>
) src
PIVOT
(
MAX(value) --must use an aggregrate function here
FOR type IN('r', 'b', 'd', 'c')
) pvt