2014-05-19 50 views
0

我有一张表(请参见下面的图像 - 红框)。它描述了我的表格(A,B,C和D)的内容是列。数据结构将始终如此,如果col A是Type_1,只有col B有一个内容,而如果Col A是Type_2,Col C和D有内容而col B是NULL。SQL Query将两行组合成一行数据

现在,用绿框包围的表格就是我想要的输出。

enter image description here

我上建立一个select语句的经验还不是很丰富的,我几乎对创建两个单独的表扶着让我期望的结果(如表1只TYPE_1数据,另一个表TYPE_2数据只要)。

问题是,是否有可能查询两行并将其组合成使用SELECT查询的单个输出结果?考虑到这两行在同一张桌子上?

谢谢。

+3

如果有多个TYPE_1和多个Type_2行,它如何知道要合并哪些行? –

+0

@JoachimIsaksson,'数据结构将永远是这样的' –

+0

我很抱歉,我在第一个评论后意识到我的图片不是很清楚。请参阅更新的主题。 – ChiSen

回答

3

事情是这样的:

SELECT 
    Table2Id, 
    MAX(B) B, 
    MAX(C) C, 
    MAX(D) D 
FROM tbl 
WHERE A != 'Type_3' 
GROUP BY Table2Id 
+0

这个查询就像一个魅力!谢谢! – ChiSen

0

您可以用括号括起来做子查询。如:

SELECT (SELECT TOP 1 B FROM table ORDER BY some_ordering), (SELECT TOP 1 C FROM table WHERE NOT C IS NULL), D FROM table 

括号内的查询可以适用于任何表,可从主查询中选择值的计算,并在过滤器中使用的数据。

1

假设只存在一个用于类型1的数据的行和2型中的一行数据,则可以使用下面的:

SELECT Id, MAX(B) AS B, MAX(C) AS C, MAX(D) AS D 
    FROM Table2 
    WHERE A IN ('Type_1','Type_2') 
    GROUP BY Id 

实施例在此SQL Fiddle