SQL视图-挑战
我有一个小挑战,试图创建一个“正在进行的工作”视图 我不确信我的语句是最好的或正确的,并导致错误“子查询返回的值超过1” 我有三个关键表SQL视图-挑战,sql,sql-server,view,Sql,Sql Server,View,我有一个小挑战,试图创建一个“正在进行的工作”视图 我不确信我的语句是最好的或正确的,并导致错误“子查询返回的值超过1” 我有三个关键表 任务 PurchaseOrderItem 资源 所有表格都有一个唯一的参考字段,例如Tasks.TA_SEQ、PurchaseOrderItem.TA_SEQ和Resource.TA_SEQ 我需要对所有这些表中的不同总计进行汇总,其关系如下: 1任务-多个PurchaseOrderItem 1任务-许多资源 我需要将所有采购订单成本值(行项目可能会有
- 任务
- PurchaseOrderItem
- 资源
- 1任务-多个PurchaseOrderItem
- 1任务-许多资源
SELECT
dbo.F_TASKS.TA_SEQ,
(
SELECT
SUM(POI_TOTAL)
From F_PO_ITEM
where POI_FKEY_TA_SEQ = dbo.F_TASKS.TA_SEQ
and POI_FKEY_POH_SEQ in
(
select
POH_SEQ
from F_PO_HEAD
where POH_STATUS in ('DORMANT', 'ACTIVE')
)
) AS [Pending PO Cost],
dbo.F_TASKS.TA_PO_COST AS [PO Cost],
dbo.F_TASKS.TA_LABOUR_COST AS [Labour Cost],
dbo.F_TASKS.TA_LABOUR_COST - SUM(dbo.F_TASK_TIME.TT_OTHER_COSTS) AS [New Labour Cost],
-----------Not Working from
(select
SUM(dbo.F_TASK_TIME.TT_OTHER_COSTS)
from F_TASK_TIME
where TT_FKEY_TA_SEQ = dbo.F_TASKS.TA_SEQ) + dbo.F_TASKS.TA_PO_COST AS [Subcontractor Costs],
(SUM(dbo.F_TASK_TIME.TT_OTHER_COSTS + dbo.F_TASKS.TA_PO_COST)) * 0.12 AS [Subcontractor Uplift],
((SUM(dbo.F_TASK_TIME.TT_OTHER_COSTS + dbo.F_TASKS.TA_PO_COST)) * 0.12) + (SUM(dbo.F_TASK_TIME.TT_OTHER_COSTS + dbo.F_TASKS.TA_PO_COST)) AS [Subcontractor Uplift Total]
-----------Not Working To
FROM dbo.F_TASKS
LEFT OUTER JOIN dbo.F_TASK_TIME
ON dbo.F_TASKS.TA_SEQ = dbo.F_TASK_TIME.TT_FKEY_TA_SEQ
LEFT OUTER JOIN dbo.F_PO_ITEM
ON dbo.F_TASKS.TA_SEQ = dbo.F_PO_ITEM.POI_FKEY_TA_SEQ
WHERE (dbo.F_TASKS.TA_TASK_DESC = 'BREAKDOWN')
AND (dbo.F_TASKS.TA_PO_COST >= 0)
AND (dbo.F_TASKS.TA_STATUS IN ('ACTIVE', 'ASSIGNED', 'COMPLETE'))
GROUP BY dbo.F_TASKS.TA_PO_COST, dbo.F_TASKS.TA_SEQ, dbo.F_TASKS.TA_LABOUR_COST
与其尝试修复您的SQL,我将提出一种不同的wau。我不能;我不容易理解select子句中select的所有内容,所以我只做了前两个 这种方法使用左外部联接来查询,查询总数按ta_seq计算。它们保证只返回一行/ta_seq,因为这就是分组的方式:
SELECT
t.TA_SEQ,
isnull(po.poi_total, 0) [Pending PO Cost],
t.TA_PO_COST AS [PO Cost],
t.TA_LABOUR_COST AS [Labour Cost],
t.TA_LABOUR_COST - isnull(tt.other_costs, 0) AS [New Labour Cost],
-- other cols missed
FROM dbo.F_TASKS t
left outer join
(
t.ta_seq, SUM(POI_TOTAL) poi_total
From F_PO_ITEM poi
where POI_FKEY_POH_SEQ in
(
select
POH_SEQ
from F_PO_HEAD
where POH_STATUS in ('DORMANT', 'ACTIVE')
)
group by t.ta_seq
) po on po.ta_seq = t.ta_seq
left outer join
(
select tt.TT_FKEY_TA_SEQ ta_seq, sum(tt.tt_other_costs) other_costs
from F_TASK_TIME tt
group by tt.TT_FKEY_TA_SEQ
) tt on tt.ta_seq = t.ta_seq
WHERE (t.TA_TASK_DESC = 'BREAKDOWN')
AND (t.TA_PO_COST >= 0)
AND (t.TA_STATUS IN ('ACTIVE', 'ASSIGNED', 'COMPLETE'))
GROUP BY t.TA_PO_COST, t.TA_SEQ, t.TA_LABOUR_COST
当我发现schema时,我还使用了表别名。tablename格式使我失明(并且不能帮助我解码丢失的子查询)。
要放入缺少的列,只需将它们转换为额外的左外部联接,如上所述
干杯-首先,这是mysql还是SQLServer?不可能是mysql。括号
[]
将投诉.dbo。->99.99%是SQL Server:-)。为标记错误道歉这是SQL Server您如何确定哪个子查询返回了多个值?