2012-07-25 60 views
1

我现在有一个表以下列格式,并与下面的示例数据:列中加入不同的值,在同一个表中,成一排

transaction name receipt 
    1  jim aisjdy 
    2  john uuyjskl 
    2  john ioxiqo 
    3  will eurique 
    1  jim xoqiel 
    3  will sijcjg 

每一个事务有客户的姓名和他们相关的收到两个单独的收据。

如何创建一个查询来显示'transaction','name'和两行不同的收据?

例子:

transaction name receipt receipt 
    1  jim aisjdy xoqiel 

我知道这是不好的做法,并在一念之间的世界里,我会创建一个包含两个不同的收据两列和/或归表入里包含事务两个表名字在一个,收据1和2在另一个。不幸的是,我没有制作这张桌子,我也没有时间去重组所有东西。

我会很乐意提供任何帮助 - 在此先感谢!

回答

4

由于只有两个值,您可以通过使用组:

select transaction, name, min(receipt), max(receipt) 
from t 
group by transaction, name 
+0

非常感谢您的帮助 - 这就是我一直在寻找的! – cgsh 2012-07-25 21:30:40

0

这不是很漂亮,但像这样的工作:

SELECT 
    tr1.transaction, 
    tr1.name, 
    tr1.receipt AS receipt1, 
    tr2.receipt AS receipt2 
FROM transaction tr1 
    JOIN transaction tr2 ON tr1.transaction = tr2.transaction 
     AND tr1.receipt < tr2.receipt 

这只有有整整两个记录每笔交易,但如果您知道总是有任何具体的号码(您只需加入并确保tr2.receipt < tr3.receipt等),它也会起作用。然而,只要只有两个人,戈登的答案更容易理解,几乎肯定会更快。

相关问题