Как получить строки для n различных значений столбца - PullRequest
0 голосов
/ 25 мая 2019

Мне нужно получить строки для 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

Так что я получаю это в результате моего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 |
-----------------------------------------------------

Но мне нужно, например, получить результат только для трех разных номеров счетов, поэтому мой запрос должен дать следующее:

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

Как я мог бы достичьэто?

1 Ответ

2 голосов
/ 25 мая 2019

Вы слышали о 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;
...