【问题标题】:How to get rows for n distinct values of a column如何获取列的 n 个不同值的行
【发布时间】:2019-10-11 22:11:12
【问题描述】:

我需要获取 n 个不同发票编号的行。

我有 SELECT 查询,它可以从表中得到结果:

SELECT A.INVOICE_NUMBER, A.INVOICE_SEQ_NUMBER, B.FILE_NUMBER 
FROM TABLE1 AS A, TABLE2 AS B 
WHERE A.INVOICE_NUMBER = B.INVOICE_NUMBER 
      AND A.INVOICE_SEQ_NUMBER = B.INVOICE_SEQ_NUMBER

所以我得到这个作为我的查询的结果:

-----------------------------------------------------
| INVOICE_NUMBER | INVOICE_SEQ_NUMBER | FILE_NUMBER |
------------------------------------------------------
|1111111111-1    |          1         | P4324324525 |
-----------------------------------------------------
|1111111111-1    |          2         | P4565674574 |
-----------------------------------------------------
|1111111111-1    |          3         | V4324552557 |
-----------------------------------------------------
|1111111111-1    |          4         | V4324552525 |
-----------------------------------------------------
|2222222222-2    |          1         | S4563636574 |
-----------------------------------------------------
|3333333333-3    |          1         | Q4324325675 |
-----------------------------------------------------
|3333333333-3    |          2         | Q4565674574 |
-----------------------------------------------------
|4444444444-4    |          1         | F4326364366 |
-----------------------------------------------------
|4444444444-4    |          2         | F4565636323 |
-----------------------------------------------------
|4444444444-4    |          3         | F4398798588 |
-----------------------------------------------------
|4444444444-4    |          4         | F4565865888 |
-----------------------------------------------------

但我需要的是,例如,只获得三个不同发票号码的结果,所以我的查询应该给出这个:

-----------------------------------------------------
| INVOICE_NUMBER | INVOICE_SEQ_NUMBER | FILE_NUMBER |
------------------------------------------------------
|1111111111-1    |          1         | P4324324525 |
-----------------------------------------------------
|1111111111-1    |          2         | P4565674574 |
-----------------------------------------------------
|1111111111-1    |          3         | V4324552557 |
-----------------------------------------------------
|1111111111-1    |          4         | V4324552525 |
-----------------------------------------------------
|2222222222-2    |          1         | S4563636574 |
-----------------------------------------------------
|3333333333-3    |          1         | Q4324325675 |
-----------------------------------------------------
|3333333333-3    |          2         | Q4565674574 |
-----------------------------------------------------

我怎样才能实现它?

【问题讨论】:

    标签: sql db2 distinct


    【解决方案1】:

    你听说过JOIN吗?

    无论如何,解决问题的一种方法是使用DENSE_RANK()

    SELECT INVOICE_NUMBER, INVOICE_SEQ_NUMBER, FILE_NUMBER
    FROM (SELECT A.INVOICE_NUMBER, A.INVOICE_SEQ_NUMBER, B.FILE_NUMBER,
                 DENSE_RANK() OVER (ORDER BY A.INVOICE_NUMBER) as seqnum
          FROM TABLE1 A JOIN
               TABLE2 B 
               ON A.INVOICE_NUMBER = B.INVOICE_NUMBER AND 
                  A.INVOICE_SEQ_NUMBER = B.INVOICE_SEQ_NUMBER
         ) t
    WHERE seqnum <= 3;
    

    【讨论】:

    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多