2014-07-14 70 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'