2015-07-02 78 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