1

我目前有一个格式如下的表格和以下示例数据:

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。不幸的是,我没有制作这张表,也没有时间重组所有内容。

我将不胜感激任何帮助 - 在此先感谢!

4

2 回答 2

4

由于只有两个值,您可以使用 group by:

select transaction, name, min(receipt), max(receipt)
from t
group by transaction, name
于 2012-07-25T21:11:36.477 回答
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 等),它也可以工作。但是,只要只有两个,戈登的答案就更容易理解,而且几乎可以肯定更快。

于 2012-07-25T21:19:00.247 回答