2015-07-02 75 views
1

我有下表。使用SQL Server 2008在单一结果中选择多行

code type value 
=================== 
100 R  3300 
100 B  7900 
101 R  6800 
100 D  2100 
100 C  2300 
101 C  1200 

我希望select语句在选择代码= 100时返回下面的结果。

code Rvalue Bvalue Dvalue Cvalue 
================================== 
100 3300 7900 2100 2300 

我成功实现了这种使用内嵌查询。但我想知道是否有更好的方法来做到这一点。

在此先感谢。

+0

它之前已经在这里完成:http://stackoverflow.com/questions/12328849/query-to-display-output-horizo​​ntally – Chuck

回答

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 
+0

这会给4行代码 –

+1

@vkp - 不,它不。无论如何,'ELSE NULL'不是必需的,因为这是行为。 –

+0

那很完美。 :) –

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