Конференция "Прочее" » знатокам SQL
 
  • VirEx © (02.08.08 18:08) [0]
    есть справочник:
    Одежда (код, наименование)

    и три таблицы:
    Сотрудник (код, ФИО)
    Выдано_одежды (код_сотрудника, код_одежды)
    Возвращено_одежды (код_сотрудника, код_одежды)

    необходимо вывести таблицу списка одежды у конкретного сотрудника в данный момент

    допустим было три записи:
    иванову выдана пара валенок
    иванову выдали шапку ушанку
    у иванова изъяли пару валенок
    выводится таблица о том что у иванова есть только шапка ушанка

    подскажите решение, т.е. код SQL и вобще возможно ли такое (Access)
  • Anatoly Podgoretsky © (02.08.08 18:15) [1]
    > VirEx  (02.08.2008 18:08:00)  [0]

    Шутник, ты у кого учился?
  • Zeqfreed © (02.08.08 18:20) [2]
    Самый очевидный вариант это вложенный запрос :)
    select * from given where cid not in (select cid from taken WHERE eid = 0);
  • Сергей М. © (02.08.08 18:23) [3]

    > возможно ли такое


    Возможно.
    Но структура твоей базы для этого не годится - ее надо выкинуть в топку и разработать с нуля.
  • easy © (02.08.08 18:48) [4]
    SELECT Сотрудник.ФИО, Одежда.наименование
    FROM (Выдано_одежды INNER JOIN Сотрудник ON Выдано_одежды.код_сотрудника = Сотрудник.Код)
    INNER JOIN Одежда ON Выдано_одежды.код_одежды = Одежда.Код
    WHERE
    Одежда.Код NOT IN (SELECT Возвращено_одежды.код_одежды FROM Возвращено_одежды WHERE Возвращено_одежды.код_сотрудника = Сотрудник.Код);

  • tesseract © (02.08.08 18:53) [5]

    > необходимо вывести таблицу списка одежды у конкретного сотрудника
    > в данный момент


    Мдя, у меня задачи - степень износа посчитать, амортизацию и прогнозировать затраны на форменку с учётом налогов.
  • Сергей М. © (02.08.08 18:55) [6]

    > easy ©   (02.08.08 18:48) [4]


    Не получится)

    Каптёр сядет за недостачу, если обнаружится, что з/к Иванову было выдано две ушанки, а фактически возвращена одна - отчет по движению ушанок при этом будет девственно чист)
  • easy © (02.08.08 19:06) [7]
    нафиг иванову 2 ушанки? о_о
  • easy © (02.08.08 19:07) [8]
    нормально всё. все ушанки наместе..
  • Сергей М. © (02.08.08 19:09) [9]

    > easy ©   (02.08.08 19:06) [7]


    Иванову не знаю, а вот каптёру сгодится, лишь бы по отчетности все было чики-пики на момент проверки)
  • Anatoly Podgoretsky © (02.08.08 19:10) [10]
    > easy  (02.08.2008 19:06:07)  [7]

    Так у обычного человека уха два
  • Сергей М. © (02.08.08 19:15) [11]

    > все ушанки наместе.


    Ну где же на месте ?


    > Одежда.Код NOT IN (SELECT Возвращено_одежды.код_одежды FROM
    > Возвращено_одежды WHERE Возвращено_одежды.код_сотрудника
    > = Сотрудник.Код);


    Читаем это условие по-простонародному: в случае если код одежды, фигурирующий в списке выданной, не фигурирует в списке возвращенной.

    Выдано две ушанки, возвращена одна - в обеих таблицах код ушанки, пришпиленный к Иванову, фигурирует. Условие не соблюдается, значит НД пуст.
  • easy © (02.08.08 19:18) [12]

    > Сергей М. © (02.08.08 19:15) [11]

    хм..
  • easy © (02.08.08 19:19) [13]
    тогда на ушанках надо проставить инвентарный номер
  • Simpson © (02.08.08 19:24) [14]
    easy ©   (02.08.08 19:19) [13]
    И GPS датчики, и можно начинать охоту на лис))
  • easy © (02.08.08 19:36) [15]

    > И GPS датчики

    лучше магнитолу встроить, она по форме и размеру какраз подходит..
  • VirEx © (02.08.08 20:00) [16]

    > [2] Zeqfreed ©   (02.08.08 18:20)
    > Самый очевидный вариант это вложенный запрос :)
    > select * from given where cid not in (select cid from taken
    > WHERE eid = 0);

    а можно расшифровать cid eid?
  • Правильный$Вася (02.08.08 20:12) [17]
    нет дат совершения операций, без этого можно навыдавать много, вернуть одну - и остальные присвоить, как уже говорилось
  • palva © (02.08.08 20:35) [18]
    При возврате шапки должен срабатывать триггер, который проверяет, что есть, что возвращать.
  • blackman © (02.08.08 21:02) [19]
    palva ©   (02.08.08 20:35) [18]
    А при получении, что есть на что одевать?
  • Johnmen © (02.08.08 21:15) [20]

    > palva ©   (02.08.08 20:35) [18]
    > При возврате шапки должен срабатывать триггер,

    Тетя Клава надежнее. В плане срабатываний...
  • Сергей М. © (02.08.08 21:54) [21]

    > Тетя Клава надежнее. В плане срабатываний


    Картина маслом - Клавдия Ивановна Триггер на страже капиталистической собственности)
  • Сергей М. © (02.08.08 21:58) [22]

    > тогда на ушанках надо проставить инвентарный номер


    А тогда см. [3]
    )

    Прямо-таки напрашивается таблица "Движение ушанок".

    з/к Иванов получил ушанку намберван ?  +1
    У з/к Иванова изъяли ушанку намберван ?  -1
    ))
  • Сергей М. © (02.08.08 22:03) [23]

    > VirEx ©   (02.08.08 20:00) [16]
    >
    > можно расшифровать cid eid?
    >


    Можно. Но Штирлиц в отпуске)

    А пока он там, чеши репу над структурой единой "Таблицы движения ушанок, валенков и прочей лагерной шняги".
    Уверяю тебя - оч даже пользительное занятие !
  • Zeqfreed © (02.08.08 22:06) [24]
    > VirEx ©   (02.08.08 20:00) [16]

    Можно, но смотри [3] и [6].
  • Павел Калугин © (03.08.08 02:49) [25]
    а количества нету?  тогда выдача-возврат только по 1

    select sum(oper), код сотр, код одежды
    from (select 1 as oper, код сотр, код одежды from выдано
            union all  
            select -1 as oper, код сотр, код одежды from возвращено) as op
    group by код сотр, код одежды

    но лучше операции все же в одной табличке держать с признаком направления и количеством выданного. тогда почти проводки бухгалтерские получатся
  • Павел Калугин © (03.08.08 02:51) [26]
    забыл последнюю строчку

    select sum(oper), код сотр, код одежды
    from (select 1 as oper, код сотр, код одежды from выдано
           union all  
           select -1 as oper, код сотр, код одежды from возвращено) as op
    group by код сотр, код одежды
    having  sum(oper) != 0
  • Johnmen © (03.08.08 03:11) [27]

    > Павел Калугин ©   (03.08.08 02:49) [25]

    Спасибо тебе, добрый человек! Не оставил в сирости и убогости!
  • Павел Калугин © (03.08.08 10:09) [28]

    > Johnmen ©   (03.08.08 03:11) [27]

    не понял сарказма......
Есть новые Нет новых   [134439   +51][b:0][p:0.001]