我正在尝试从与其没有直接关系的表中为客户开账单,并且任何类型的连接似乎都不想使用Alter表语句。
我有4张桌子:
AllEvents.EVENTID
是所有其他表中的外键。
DesiredStaffLevel
有一个计算列,表示我要在TotalManHours
EventBill
的工作小时数
Venue
有一个名为VenueRate
的变量我想在事件账单中使用(场地是AllEvents
中的fk
所以我想要的是由TotalRate乘以TotalManHours的总和。
我的问题是,会场信息通过场地ID链接到Allevents表,而偶数键链接到事件帐单和所需的员工级别。
我认为这样的事情可行,但事实并非如此。我认为它是因为它无法找到具体的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 :(得分:0)
我正在寻求答案而不是评论,因为我需要格式化以帮助解释。
在SQL中,您不要在 select 查询中组合 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 |
如何将计算结果输入Table EventBill?
使用这样的更新:
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