选择具有相同ID但在另一列中具有不同结果的行

时间:2017-07-25 19:45:00

标签: sql

sql:我有一个这样的表:

+------+------+
|ID    |Result|
+------+------+
|1     |A     |
+------+------+
|2     |A     |
+------+------+
|3     |A     |
+------+------+
|1     |B     |
+------+------+
|2     |B     |
+------+------+

输出应该是这样的:

输出:

+------+-------+-------+
|ID    |Result1|Result2|
+------+-------+-------+
|1     |A      |B      |
+------+-------+-------+
|2     |A      |B      |
+------+-------+-------+
|3     |A      |       |
+------+-------+-------+

我该怎么做?

3 个答案:

答案 0 :(得分:0)

SELECT
    Id,
    MAX((CASE result WHEN 'A' THEN 'A' ELSE NULL END)) result1,
    MAX((CASE result WHEN 'B' THEN 'B' ELSE NULL END)) result2,
FROM 
    table1
GROUP BY Id

结果

+------+-------+-------+
|Id    |Result1|Result2|
+------+-------+-------+
|1     |A      |B      |
|2     |A      |B      |
|3     |A      |NULL   |
+------+-------+-------+

在SQL小提琴上运行实时演示:(http://sqlfiddle.com/#!9/e1081/2

答案 1 :(得分:0)

有几种方法可以做到这一点。 没有一个是直接的。 从理论上讲,一个简单的方法是创建2个临时表,在这里你可以分离数据,所有“A”结果都在一个表中,“B”在另一个表中。

然后使用简单查询获得结果。使用JOIN。

如果允许您在流程上使用某些scrpting,那么它就更简单了,否则您需要在查询中使用更复杂的逻辑。并且为了查询alwasy的工作,你需要有一些规则,例如,一个表总是包含比B表更多的ID。

如果您发布真实示例,则更容易获得更好的答案。

答案 2 :(得分:0)

出于这个原因:

ID名称文件名

1001 swapan 4566.jpg
1002 swapan 678.jpg
1003 karim 7688.jpg
1004 tarek 7889.jpg 1005 karim fdhak.jpg

输出:

ID名称文件名

1001 swapan 4566.jpg 678.jpg
1003 karim 7688.jpg fdhak.jpg 1004 tarek 7889.jpg ... ...... ...... ......