How to get rows for n distinct values of a column

▼魔方 西西 提交于 2019-12-11 21:14:41

问题


I need to get rows for n distinct invoice numbers.

I have SELECT query that gives me results from the table:

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

So I get this as a result of my query:

-----------------------------------------------------
| 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 |
-----------------------------------------------------

But what I need is, for example, to get result for only three distinct invoice numbers, so my query should give this:

-----------------------------------------------------
| 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 |
-----------------------------------------------------

How I could achieve it?


回答1:


Have you heard of JOIN?

In any case, one way to solve your problem uses 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;


来源:https://stackoverflow.com/questions/56307346/how-to-get-rows-for-n-distinct-values-of-a-column

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!