2017-04-04 40 views
0

我已經拋出了一個錯誤的SQL代碼說SQL集團通過投擲錯誤(SQL Server)的

Error: SQLCODE=-119, SQLSTATE=42803, SQLERRMC=WONUM

代碼工作正常,直到我通過添加組:

select * 
    from workorder 
    left join labtrans on labtrans.refwo=workorder.wonum and labtrans.siteid=workorder.siteid 
    left join matusetrans on workorder.wonum=matusetrans.refwo and workorder.siteid=matusetrans.tositeid and linetype not in (select value from synonymdomain where domainid='LINETYPE' and maxvalue='TOOL') 
    left join locations on locations.location = workorder.location and locations.siteid=workorder.siteid 
    left join person on personid in (select personid from labor where laborcode = labtrans.laborcode) 
    left join po on workorder.wonum=po.hflwonum and workorder.siteid=po.siteid and workorder.orgid=po.orgid 
    left join companies on companies.company = po.vendor and companies.orgid=po.orgid 
    left join pluspcustomer on pluspcustomer.customer=workorder.pluspcustomer 
    where workorder.wonum='10192' 
    group by personid 
; 
+3

您不能'選擇*'和'groupid by personid'。而你的錯誤信息看起來不像sql服務器。你正在使用哪個'select @@ version'? – SqlZim

+3

你不瞭解什麼?你有'select *'和'group by personid'。你有一個zillion列不在'group by'中,並且不在聚合函數中。 –

+1

沒有任何聚合函數,你不能隨意在最後包含group by。 –

回答

2

,如果你只有GROUP BY personid,你不能選擇一切,除了personid,或使用聚合函數,如SUMMAX領域等

UPDATE

如果你只是想看到重複personid,你可以使用:

select personid 
from table 
group by personid 

但要注意這裏:如果你寫這樣的查詢,即以確定重複的唯一領域記錄是persionid,如果您需要從不同的CompanyId中唯一識別每個persionid,則需要group by persionid, CompanyId,否則,來自不同公司的相同personId將被視爲重複記錄。

但是,如果要刪除這些重複記錄,則應使用ROW_NUMBER()OVER (Partition by persionid Order by your_criteria)來刪除重複記錄。嘗試做一些搜索,看看它是如何工作的,通常我更喜歡使用該功能以及CTE table expression

+0

感謝,很新的這個,因爲我沒有做太多的SQL只有基本的查詢 - 只是想通過刪除重複的記錄和思考組如果你想刪除重複記錄使用'DISTINCT' – Karen

+1

回答 –

+0

@Karen檢查我的更新將是一種選擇 – LONG

1

,如果你只需要刪除重複,使用DISTINCT與您的查詢是這樣的:

查詢:

SELECT * FROM ..... 

修改:

SELECT DISTINCT * FROM ..... 

希望它能幫助。