Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с запросом ................ [D7]


Страницы:   1 2

03111978 ©   (2010-09-02 12:04:00) 

Есть табличка вида :

Оплата    Иванов
Оплата    Петров
Оплата    Сидоров
Оплата    Кукушкин
Оплата    Мордушкин

Необходимо сделать табличку вида :

Оплата    Иванов
Оплата    Петров
Оплата    Сидоров
Оплата    Кукушкин
Оплата    Мордушкин
Задолженность    Иванов
Задолженность    Петров
Задолженность    Сидоров
Задолженность    Кукушкин
Задолженность    Мордушкин


03111978   (2010-09-03 12:23:00) [1]


> проще
> ФИО                сумма   флаг
> ----                ------   ---
> Иванов            100        1        
> Петров             150       1        
> Сидоров           20         1        
> Кукушкин         0           1    
> Мордушкин       43         1      
> Иванов            110       -1      
> Петров             50        -1      
> Сидоров           20        -1      
> Кукушкин         0          -1      
> Мордушкин       430      -1
>
> тогда задача решается
> select ФИО, сумма
> from табличка
> order by ФИО asc, флаг desc


У меня нет этой таблички, ее нужно получить в таком виде


Petr V. Abramov   (2010-09-02 16:07:00) [2]


> Почему, спрашивается, не сделать ОДНУ табличку с тремя полями:
>
>
> Ф.И.O.             Оплата   Задолженность
>
> Иванов            100                0
> Петров             50                 50
> Сидоров           20                 80
> Кукушкин         0                 100
> Мордушкин      43                 57


проще
ФИО                сумма   флаг
----                ------   ---
Иванов            100        1        
Петров             150       1        
Сидоров           20         1        
Кукушкин         0           1    
Мордушкин       43         1      
Иванов            110       -1      
Петров             50        -1      
Сидоров           20        -1      
Кукушкин         0          -1      
Мордушкин       430      -1

тогда задача решается
select ФИО, сумма
from табличка
order by ФИО asc, флаг desc


Сергей М.   (2010-09-02 13:25:00) [3]


> Потому что в итоге необходимо получить следующее


А вот то что пользователь в результате должен увидеть- это уже из другой оперы. И опять же нт никакого повода плодить кучу таблиц, усложняя жизь себе и людям.

Ф.И.O.             Вид                               Месяц             Сумма

Иванов            Задолженность              Январь                   0
Иванов            Оплата                          Январь                   100
Иванов            Задолженность              Февраль                 50
Иванов            Оплата                          Февраль                 50
Петров            Задолженность              Январь                   44
Петров            Оплата                          Январь                   56
Петров            Задолженность              Февраль                 99
Петров            Оплата                          Февраль                 1


И. Павел   (2010-09-02 13:18:00) [4]

> Потому что в итоге необходимо получить следующее :

Еще одно поле в таблице: период оплаты/начисления. Иначе каждый год придется добавлять еще 12 новых полей :)


И. Павел   (2010-09-02 13:17:00) [5]

> Этот запрос каждый раз создает табличку

Ну очищайте ее перед новым созданием, и все. Или DELETE или DROP TABLE.

А лучше, соедините оплаты и начисления изначально в одну таблицу. Например: можно для каждой записи добавить флаг: начисление это, оплата (тогда можно быдет предусмотреть несколько типов оплат).

А если оплат и начислений для каждого человека не может быть несколько, то [27]


03111978   (2010-09-02 13:16:00) [6]


> Почему, спрашивается, не сделать ОДНУ табличку с тремя полями:
>  

Потому что в итоге необходимо получить следующее :

Оплата                ФИО         Январь                       .......             Декабрь

Оплата               Кукушкин         0                        .......                   100
Задолженость     Кукушкин        43                       ........                     57


03111978   (2010-09-02 13:12:00) [7]


> И. Павел ©   (02.09.10 13:04) [26]
>
> > [24] 03111978   (02.09.10 13:00)
>
> Чем [21] не устраивает?


Этот запрос каждый раз создает табличку, да спасибо, все верно, работает, но если выполнить этот запрос еще раз, то он опять создает табличку, но она там уже есть и запрос не отрабатывает. Наверное все таки в моем случае лучше сделать как в
> [25]


Сергей М.   (2010-09-02 13:11:00) [8]


> 03111978   (02.09.10 13:00) [24]
>
> сделал так : 2 таблички (Dolg И Oplata)


Что что ты маловато баблиек наплодил.. Давай ышшо с десяток наделай)

Почему, спрашивается, не сделать ОДНУ табличку с тремя полями:

Ф.И.O.             Оплата   Задолженность

Иванов            100                0
Петров             50                 50
Сидоров           20                 80
Кукушкин         0                 100
Мордушкин      43                 57

??


Сергей М.   (2010-09-02 13:11:00) [9]

> баблиек

табличек


И. Павел   (2010-09-02 13:04:00) [10]

> [24] 03111978   (02.09.10 13:00)

Чем [21] не устраивает?


03111978   (2010-09-02 13:04:00) [11]

таблица Oplata :                                      таблица Dolg :

Иванов  56                                               Сидоров 5
Сидоров 45                                               Иванов  12
                                                             
Необходимо получить :

Таблица: Rez(Например по Иванову)

Оплата                            Иванов                      56
Задолженность                 Иванов                      12


03111978   (2010-09-02 13:00:00) [12]

сделал так : 2 таблички (Dolg И Oplata)
Теперь необходимо сформировать еще одну табличку и вывести ее на экран, в которой будет 2 строчки, долг и оплата, по конкретно выбранному человеку.


Сергей М.   (2010-09-02 12:38:00) [13]


> И. Павел ©   (02.09.10 12:36) [21]


> FROM zadolz


Нет у него никакой "zadolz")
Он же говорит "есть табличка", а не "есть дветаблички")


Сергей М.   (2010-09-02 12:36:00) [14]


> вывести на экран


Запрос номер раз.


> сохранить в базе


Запрос номер два.

Минимум ДВА запроса требуется, ущучиваешь ?)
Тебя какой из них интересует ?)


И. Павел   (2010-09-02 12:36:00) [15]

> Как вывести на экран, так и сохранить в базе

Тогда, наверное, можно сделать такой запрос (во всяком случае в MS SQL SERVER):

SELECT a.summa, a.FIO
INTO newt
FROM
(SELECT summa, FIO FROM oplati
UNION
SELECT summa, FIO FROM zadolz) AS a


03111978   (2010-09-02 12:32:00) [16]


> И. Павел ©   (02.09.10 12:27) [17]
>
> > 03111978
>
> Кстати, нужно только вывести итоговую "таблицу" на экран,
>  или сохранить ее в базе?


Как вывести на экран, так и сохранить в базе


brother   (2010-09-02 12:31:00) [17]

> Ну опечатка . И что ?

прочитай [5] вопросы отпадут...


Сергей М.   (2010-09-02 12:29:00) [18]


> 03111978   (02.09.10 12:27) [16]
>
>


Да как же тебе совет дать, мил человек, коль ты не можешь вразумительно или не желаешь конкретизировать что тебе нужно ?

"Сформировать табличку" - понятие весьма растяжимое)

Я ж тебя спросил в [2], а воз и ныне там)


И. Павел   (2010-09-02 12:27:00) [19]

> 03111978

Кстати, нужно только вывести итоговую "таблицу" на экран, или сохранить ее в базе?


03111978   (2010-09-02 12:27:00) [20]


> Сергей М. ©   (02.09.10 12:25) [14]
>
>
> > 03111978   (02.09.10 12:22) [10]
>
>
> Ты всерьез полагаешь что для этого тебе  нужен ОДИН запрос
> ?)
> Наивный чукотский юноша)
>


Я попросил, совета, а вы здесь целую дискуссию развели )))))))))))))))))


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо