2014-07-14 68 views
0

我遇到困难设置下面的查询涉及多个,语句,我想:SQL服务器,内部连接

发现有两个特定MATERIALID值之一MATERIALSCOSTACT表中的所有工作单值。

然后从WORKORDER表中我想用'主替换'或'安装'描述去掉所有的值,然后我想确保我只看水或下水道ASSETGROUP。我想确保我只查看自今年第一季度以来发生过WOMACOST的记录。

我想内部加入他们共享的WORKORDERID列上的MATERIALSCOSTACT表和WORKORDER表。

我无法弄清楚如何与德第二个连接的第一条语句,而在第二个语句时,SQL Server是给我的“内部”语法错误

select workorderid from [CityWorks].[AZTECA].[materialcostact] where materialsid = '30791' or 
materialsid = '30841' 


Select * from [CityWorks].[AZTECA].[WORKORDER] 
where description not like '%main replace%' and description not like '%install%' 
and (assetgroup = 'WATER' or Assetgroup = 'SEWER') 
and womatcost != 0 
and ACTUALSTARTDATE > '2013-12-31 00:00:00.000' 
INNER JOIN workorderid on [CityWorks].[AZTECA].[materialcostact].[workorderid] = 
[CityWorks].[AZTECA].[WORKORDER].[workorderid] 
group by assetgroup 

非常感谢你的人谁可以帮助!

+0

谢谢你们两位! JiggsJedi你的查询工作完美 – user3715307

回答

0

你只是有你的where子句在错误的地方。它需要在联接之后。

Select * from [CityWorks].[AZTECA].[WORKORDER] 
INNER JOIN workorderid on [CityWorks].[AZTECA].[materialcostact].[workorderid] = 
[CityWorks].[AZTECA].[WORKORDER].[workorderid] 
where description not like '%main replace%' and description not like '%install%' 
and (assetgroup = 'WATER' or Assetgroup = 'SEWER') 
and womatcost != 0 
and ACTUALSTARTDATE > '2013-12-31 00:00:00.000' 
group by assetgroup 

如果这些列出现在多个表中,那么您可能必须别名表或在where子句中更明确。

0

我相信这是你想要什么:

注意:尽量使用别名,它们使你的代码更易于阅读。

Select * 
from [CityWorks].[AZTECA].[WORKORDER] WO 
JOIN [CityWorks].[AZTECA].[materialcostact] MC 
    on WO.[workorderid] = MC.[workorderid] 
    and (MC.materialsid = 30791 or MC.materialsid = 30841) 
where description not like '%main replace%' and description not like '%install%' 
and (assetgroup = 'WATER' or Assetgroup = 'SEWER') 
and womatcost != 0 
and ACTUALSTARTDATE >= '2014-01-01'