使用SQL Server 2008在单个结果中选择多个行

时间:2015-07-02 16:34:49

标签: sql sql-server sql-server-2008

我在桌子下面。

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 

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

先谢谢。

3 个答案:

答案 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