#sql #postgresql
Вопрос:
Я использую базу данных Postgres.
Я пытался решить эту проблему в течение нескольких часов и прочитал десятки тем, но пока безрезультатно
Поскольку я не знаю, как объяснить свою проблему словами, вот что мне нужно на примере :
Мой вопрос таков
select distinct chiffre_affaires.contrat_pentete_id, chiffre_affaires.chiffre_affaires_id, chiffre_affaires.chiffre_affaires_montant_total from chiffre_affaires;
Выходной ток :
contrat_pentete_id | chiffre_affaire_id | chiffre_affairs_montant_total |
---|---|---|
1 | 1 | 111.7848 |
1 | 2 | 111.7848 |
1 | 3 | 111.7848 |
1 | 4 | 111.7848 |
1 | 5 | 111.7848 |
1 | 6 | 111.7848 |
2 | 7 | 90 |
2 | 8 | 90 |
2 | 9 | 90 |
2 | 10 | 90 |
Ожидаемый результат :
значения null могут быть заменены на 0, подойдет как null, так и 0
contrat_pentete_id | chiffre_affaire_id | chiffre_affairs_montant_total |
---|---|---|
1 | 1 | 111.7848 |
1 | 2 | нулевой |
1 | 3 | нулевой |
1 | 4 | нулевой |
1 | 5 | нулевой |
1 | 6 | нулевой |
2 | 7 | 90 |
2 | 8 | нулевой |
2 | 9 | нулевой |
2 | 10 | нулевой |
Заранее благодарю вас за любую помощь !
Ответ №1:
Пытаясь понять, чего вы хотите достичь : для группы строк с одинаковым идентификатором contrat_pentete_id, упорядоченных по ASC chiffre_affaires_id, вы хотите отобразить значение chiffre_affaires_montant_total для первой строки и значение NULL для следующих строк. Если это так, вы можете попробовать это :
SELECT DISTINCT ca.contrat_pentete_id, ca.chiffre_affaires_id, CASE WHEN ca.chiffre_affaires_id = first_value (ca.chiffre_affaires_id) OVER (ORDER BY ca.chiffre_affaires_id) THEN ca.chiffre_affaires_montant_total ELSE NULL END AS ca.chiffre_affaires_montant_total FROM chiffre_affaires AS ca ORDER BY ca.contrat_pentete_id, ca.chiffre_affaires_id
Комментарии:
1. Большое вам спасибо, после некоторых обновлений на основе вашего сценария я получил то, что мне было нужно !
2. Спасибо, что приняли ответ, чтобы закрыть вопрос.
Ответ №2:
Благодаря Эдуарду Х. Наконец — то я написал сценарий, который выполнил свою работу.
Вот решение :
SELECT DISTINCT ca.contrat_pentete_id, ca.chiffre_affaires_id, ca.chiffre_affaires_annee_mois, CASE WHEN ca.chiffre_affaires_id = first_value(ca.chiffre_affaires_id) OVER (PARTITION BY ca.contrat_pentete_id ORDER BY ca.chiffre_affaires_annee_mois) THEN ca.chiffre_affaires_montant_total END AS montant_facture FROM chiffre_affaires AS ca ORDER BY ca.contrat_pentete_id;