1

我在构建选择查询时遇到问题。

我有一个表格,我在下面的简化版本中显示了它。列比我展示的多得多,但我省略了那些与此查询无关的列。

ID   ReceiptNo  TransactionType 
--------------------------------
 1 | 2SJ1532   |  SALE
 2 | 8UG7825   |  SALE
 3 | 0619373   |  SALE
 4 | 8UG7825   |  RFND
 5 |           |  TEST

我只想选择那些交易类型为“SALE”的行,其中所选行的 ReceiptNo 也出现在交易类型为 RFND 的行中。

因此,在上面的示例中,我想选择第 2 行。因为它具有交易类型 SALE,并且其 ReceiptNo 也出现在交易类型为 RFND 的行中。

我有以下查询来选择所有 SALE 类型的交易类型,但我认为我需要一个子查询来使选择按上述方式工作。如果有人可以提供帮助,那就太好了。

SELECT * FROM $table_name WHERE RecieptNo IS NOT NULL AND TRIM(RecieptNo) <>  '' AND   TransactionType = 'SALE'
4

3 回答 3

1
SELECT t.*
FROM your_table t
JOIN your_table t2 ON t2.TransactionType = 'RFND' AND t2.ReceiptNo=t.ReceiptNo
GROUP BY t.ID
于 2013-02-22T10:14:22.407 回答
1

尝试这个:

SELECT * 
FROM $table_name
WHERE RecieptNo IN(SELECT RecieptNo 
                   FROM tablename
                   WHERE TransactionType IN('Sale', 'RFND')
                   GROUP BY RecieptNo 
                   HAVING COUNT( DISTINCT TransactionType) = 2);

这将确保所选RecieptNo的交易类型Sale, RFND

于 2013-02-22T09:32:18.920 回答
1
SELECT *
FROM $table_name X1
WHERE X1.TransactionType = 'SALE'
AND EXISTS (
SELECT X2.ReceiptNo
FROM $table_name X2
WHERE X1.ReceiptNo=X2.ReceiptNo
AND X2.TransactionType = 'RFND'
)
于 2013-02-22T09:34:51.553 回答