Мне нужно сделать промежуточное поле на основе двух полей - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть две таблицы Qut1 и Qut10.

Qut1 имеет список позиций кавычек

Id LineNum Price
1  0       10
1  1       20
1  2       100

Qut10 содержит строки, в которых промежуточный итогдолжно произойти

Id AfterLineNum
1  1
1  2

У кого-нибудь есть идея, как мне создать скрипт, который бы дал мне номера строк, которые нужно сложить вместе, чтобы получить промежуточный итог?

т.е. (1, 1.1 (Т.е. ставится после строки 1 qut1, но перед строкой 2), 30 (1, 2.1, 100)

1 Ответ

0 голосов
/ 10 февраля 2019

Вот запрос, который сопоставляет каждую позицию с соответствующей промежуточной суммой.Он JOIN определяет обе таблицы и использует коррелированный подзапрос с условием NOT EXIST, чтобы убедиться, что выбрана соответствующая запись промежуточного итога.

SELECT
  t1.LineNum,
  t1.Price,
  t2.AfterLineNum
FROM
    Qut1 t1
    INNER JOIN Qut10 t2 
        ON t2.AfterLineNum >= t1.LineNum
        AND NOT EXISTS (
            SELECT 1 
            FROM Qut10 
            WHERE AfterLineNum >= LineNum AND AfterLineNum < t2.AfterLineNum
        )
ORDER BY
    t2.AfterLineNum ,
    t1.LineNum

Вы не пометили свою RDBMS, но это стандартный SQL, которыйдолжен работать на большинстве платформ.

Эта демонстрация DB Fiddle с вашими образцами данных дает:

| LineNum | Price | AfterLineNum |
| ------- | ----- | ------------ |
| 0       | 10    | 1            |
| 1       | 20    | 1            |
| 2       | 100   | 2            |

Если вы ищетедля фактического вычисления промежуточных итогов вы можете просто включить агрегацию :

SELECT
  t2.AfterLineNum,
  SUM(t1.Price) subtotal
FROM
    Qut1 t1
    INNER JOIN Qut10 t2 
        ON t2.AfterLineNum >= t1.LineNum
        AND NOT EXISTS (
            SELECT 1 
            FROM Qut10 
            WHERE AfterLineNum >= LineNum AND AfterLineNum < t2.AfterLineNum
        )
GROUP BY t2.AfterLineNum
ORDER BY t2.AfterLineNum

DB Fiddle :

| AfterLineNum | subtotal |
| ------------ | -------- |
| 1            | 30       |
| 2            | 100      |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...