繁体   English   中英

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

[英]Select multiple rows in single result using SQL Server 2008

我有下表。

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

当我为code = 100选择时,我希望select语句返回低于结果的值。

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

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

提前致谢。

不知道这是否是最好的方法,但是它可以工作。 使用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

您可以使用PIVOT运算符。 我自己从未真正使用过它,但是我认为它会做您想要做的事情。 并不是很确定这会好多少。

https://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx

使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM