我目前有一个表格,格式如下,并带有以下示例数据:
transaction name receipt
1 jim aisjdy
2 john uuyjskl
2 john ioxiqo
3 will eurique
1 jim xoqiel
3 will sijcjg
每笔交易都与客户的姓名相关联,并且他们会收到两份单独的收据。
如何创建一个能够在一行中显示“交易”,“名称”和两个不同收据的查询?
示例:
transaction name receipt receipt
1 jim aisjdy xoqiel
我知道这是不好的做法,在一个创意世界中,我创建了两个包含两个不同收据的列和/或将表规范化为两个表,其中包含一个事务和名称,收据1和2在另一个。不幸的是,我没有制作这张桌子,也没有时间对所有东西进行重组。
我很感激任何帮助 - 提前谢谢!
答案 0 :(得分:4)
由于只有两个值,您可以使用group by:
select transaction, name, min(receipt), max(receipt)
from t
group by transaction, name
答案 1 :(得分: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&lt; tr3.receipt等)它也会有用。 。然而,只要只有两个,戈登的回答更容易理解,几乎肯定更快。