Как подсчитать частоту появления элемента в новом столбце, не меняя структуру таблицы? SQL - PullRequest
0 голосов
/ 07 марта 2012

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

Поскольку это довольно сложно, я попытаюсь привести хороший пример, чтобы объяснить, что я имею в виду:

Таблица ввода:

BS         item_id     price
-------------------------------
BS1          3        10
BS1          5        12 
BS3          6        15 
BS3          7        18 
BS4          8         5
BS1          9        10        

Счет должен добавить столбец Сумма. Сумма основана на BS.

BS         item_id     price      Amount
    -------------------------------
    BS1          3        10        3
    BS1          5        12        3
    BS3          6        15        2
    BS3          7        18        2
    BS4          5        12        1
    BS1          8        10        3

Я хотел бы знать, возможно ли использовать count с подзапросом для получения суммы, как я показал выше.

Когда я использую в коде, как показано ниже, для каждого элемента BS я получаю значение 1

SELECT COUNT(bsc_bsc_id)AS Amount,
                  katg_katg_id,
                  ex_wert 
from (
        SELECT bs_bs_id,
               katg_katg_id,
               jahr,
               TO_CHAR (TO_DATE (a.jahr || a.monat, 'YYYYMM'), 'YYYYMM') AS monat_key,
               bsc_bsc_id,
               buchg_date,
               ex_wert,
               vp_wert
 FROM  fis_buchg_schl a

Приведенный выше код является более или менее псевдокодом, поскольку я отбирал большие части, потому чтослишком долго.Намек в правильном направлении, чтобы решить мою проблему, было бы здорово.

Ответы [ 2 ]

6 голосов
/ 07 марта 2012

Если вы используете SQLServer 2005 или более позднюю версию, попробуйте:

Select BS, item_id, price, 
       count(*) over (partition by BS) Amount
from yourTable

РЕДАКТИРОВАТЬ: должно работать и для Oracle.

3 голосов
/ 07 марта 2012
SELECT A.BS,A.ITEM_ID,A.PRICE,B.COUNT_BS
FROM
(SELECT BS,ITEM_ID,PRICE
 FROM YOURINPUTTABLE) A, 
(SELECT BS,COUNT(BS) AS COUNT_BS
 FROM YOURINPUTTABLE
 GROUP BY BS) B
WHERE A.BS = B.BS;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...