2017-07-25 49 views
-3

SQL不同的结果中选择行:我有一个这样的表:具有相同的ID,但在另一列

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

输出应该是这样的:

输出:

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

我怎样才能做到这一点?

+1

请重新格式化内容。这是不可读的。 – DanielO

回答

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 

结果在SQL小提琴

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

运行现场演示:(http://sqlfiddle.com/#!9/e1081/2

+1

这只有在只有两个可能的值是A和B时才有效 - 这是由OP提供的,尽管未被确认。 – Eli

0

有几个方法可以做到这一点。 012hm没有一个直线前进。在理论上,一个简单的方法是创建2个临时表,您在这里分隔数据,在一个表中创建所有“A”结果,在另一个表中创建“B”。

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

如果您允许在流程上使用某些scrpting,那么它更简单,其他方面您需要更复杂的查询逻辑。而对于你查询alwasy的工作,你需要有一些规则,如表总是包含比B表更多的ID。

如果你发布你的真实例子,获得更好的答案会更容易。

0

这个原因:

ID名称的文件名

1001 swapan 4566.jpg
1002 swapan 678.jpg
1003卡里姆7688.jpg
1004塔雷克7889.jpg 1005卡里姆fdhak。 jpg

输出:

ID名称文件名

1001 swapan 4566.jpg 678.jpg
1003卡里姆7688.jpg fdhak.jpg 1004塔里克7889.jpg ... ...... ......

+0

SO不能这样工作。您必须更新问题以提供新的示例数据并通知我们'filename'列可能具有*不可预知*值 –

+0

检查此问题([https://stackoverflow.com/questions/15462753/mysql-join-multiple -rows-AS柱(https://stackoverflow.com/questions/15462753/mysql-join-multiple-rows-as-columns)) –

相关问题