2016-01-15 1 views
0

Я пытаюсь получить ставку для выставления счета клиенту из таблицы, которая напрямую не связана с ним, и любой тип соединения, похоже, не хочет работать с таблицей Alter заявление.Получение определенного TUPLE и возврат его sql

У меня есть 4 таблицы:

  • Место проведения
  • AllEvents
  • DesiredStaffLevel
  • EventBill

AllEvents.EVENTID является внешним ключом во всех остальных таблицах.

DesiredStaffLevel имеет вычисляемый столбец для общего количества отработанных часов под названием TotalManHours, что я хочу использовать в EventBill

Venue имеет переменную под названием VenueRate, что я хотел бы использовать в счет событий (место является fk in AllEvents)

Так что я хочу, это сумма TotalManHours, умноженная на место встречи.

Моя проблема заключается в том, что venuerate привязан к таблице «Алетки» идентификатором места проведения мероприятия и ключевыми ссылками на eventbill и желаемым уровнем персонала.

Я думал, что-то вроде этого будет работать, но это не так. Я думаю, потому что он не может найти конкретный VENUEID/VenueRate, но я не уверен.

Select Sum(DesiredStaffLevel.TotalManHours)AS TotalHours 

    From DesiredStaffLevel 

    Join AllEvents ON eventID = EventIDFK 

     For EventID != null(

     Alter Table EventBill 

     ADD EstCharge ASSum(TotalManHours * VenueRate)  

     Group BY eventIdfk; 

    ) 
+0

Подождите ... какой RBDMS вы используете? MySQL или SQL Server? –

+0

microsoft sql 2008 – Discipleofaslan

+0

Как мы можем использовать таблицу Alter в запросе Select? Странно .. Вы хотите создать колонку EstCharge в таблице счетов за события в зависимости от какого-то условия? –

ответ

0

Я прибегаю к ответу вместо комментария, потому что мне нужно форматирование, чтобы помочь объяснить.

В SQL вы НЕ комбинируете alter table внутри выберите запрос. Скорее всего, вам нужен ОБНОВЛЕНИЕ ЗАПРОСА и что вам не нужно alter table.

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

Для примера


AllEvents 
EVENTIDFK, VENUEIDFK, EventDate, EventName 
1,   88,  2016-01-17, VIP 60th Birthday 

Venue 
VENUEID, VenueRate 
88,  12.12 

DesiredStaffLevel 
EVENTIDFK, TotalManHours 
1,   100 

EventBill 
EVENTIDFK, EstCharge 
1, 

Затем с помощью запроса:

SELECT 
     ae.EVENTID 
    , v.VENUEID 
    , v.VenueRate 
    , dse.TotalManHours 
    , (dse.TotalManHours * v.VenueRate) AS CalculatedBill 
FROM AllEvents AS ae 
     INNER JOIN Venue AS v ON ae.VENUEIDFK = v.VENUEID 
     INNER JOIN DesiredStaffLevel AS dse ON ae.EVENTID = dse.EVENTIDFK 
; 

Что дает этот результат:

| EVENTID | VENUEID | VenueRate | TotalManHours | CalculatedBill | 
|---------|---------|-----------|---------------|----------------| 
|  1 |  88 |  12.12 |   100 |  1212.00 | 

Как вы можете получить, что расчет в таблицу EventBill?


Используйте UPDATE, как это:

UPDATE 
     EventBill 
SET EstCharge = dt.CalculatedBill 
FROM EventBill 
     INNER JOIN (
      SELECT 
        ae.EVENTID 
       , SUM(dse.TotalManHours * v.VenueRate) AS CalculatedBill 
      FROM AllEvents AS ae 
        INNER JOIN Venue AS v ON ae.VENUEIDFK = v.VENUEID 
        INNER JOIN DesiredStaffLevel AS dse ON ae.EVENTID = dse.EVENTIDFK 
      GROUP BY 
        ae.EVENTID 
    ) AS dt ON EventBill.EVENTIDFK = dt.EVENTID 
; 

Затем инспектировать результат с помощью простого выбора

SELECT 
     * 
FROM EventBill 
; 

и результат есть:

| EVENTIDFK | EstCharge | 
|-----------|-----------| 
|   1 | 1212.00 | 

Вот рабочая демонстрация (по sqlfiddle) http://sqlfiddle.com/#!6/31f09/2

+0

Обратите внимание, что этот «ответ» представляет собой попытку показать, как задать вопрос. ** Модель данных и данные, используемые выше, являются чистой фантастикой **, и я не знаю, насколько близко (или далеко) от реальных требований. –

+0

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

+0

Это не просто форматирование, это важно. ** необходимо ** предоставить образцы данных и «ожидаемый результат». Если вы сделаете обоим из них, тогда вам будет намного проще сообщить, что вам нужно; и нам легче ответить, поэтому вы быстрее получите ответ. Также я предлагаю ознакомиться с http://sqlfiddle.com, он может помочь вам ответить на ваши собственные проблемы или мы можем помочь и использовать его для таблиц и примеров данных –

Смежные вопросы