将同一表中的列中的不同值连接到一行中

时间:2012-07-25 21:05:37

标签: sql

我目前有一个表格,格式如下,并带有以下示例数据:

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在另一个。不幸的是,我没有制作这张桌子,也没有时间对所有东西进行重组。

我很感激任何帮助 - 提前谢谢!

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等)它也会有用。 。然而,只要只有两个,戈登的回答更容易理解,几乎肯定更快。