2017-09-15 69 views
0

我想合併這兩個選擇,但我對SQL不太熟悉。 我想在第二次選擇時使用第一次選擇的這兩列(sAuftrag,sInfo1)的結果數據。在WHERE子句中使用子選擇結果

我必須通過知道SQL命令的OLEDB接口使用MS-Access數據庫。

第一選擇:

SELECT DISTINCT sAuftrag, sInfo1 FROM tblStückliste 

結果(計數= 32):

BA15.00929 22 
BA15.00929 6, .... ("BA15.00929" is sAuftrag, and "22" is sInfo1) 

對於這些32的每個結果,使一個與WHERE子句所接收的數據的第二選擇。

第二選擇:

SELECT ID, (dwStückzahl*dwLänge) AS dwLaufmeter, dwDicke, dwBreite 
FROM tblStückliste 
WHERE sAuftrag = 'BA15.00929' AND sInfo1 = '22' 

結果(計數= 1-4每選擇):

209 34860 17 78 
210 47250 17 78 
211 110250 17 78 
....up to four 

我嘗試了很多變化的,以找到一個解決方案,例如

SELECT ID, (dwStückzahl*dwLänge) AS dwLaufmeter, dwDicke, dwBreite, SS.sAuftrag, SS.sInfo1 
FROM tblStückliste, 
    (SELECT DISTINCT sAuftrag, sInfo1 FROM tblStückliste) SS 
WHERE sAuftrag = SS.sAuftrag AND sInfo1 = SS.sInfo1 

編輯:##########################

OK,我的表中有屬於一起條目。這些條目可以通過字段sAuftrag和sInfo1來標識。所以你可以稱它爲組,我的表中有一組條目。下一步是計算(dwStückzahl*dwLänge)AS dwLaufmeter並獲得每個條目的ID,dwDicke,dwBreite。

此外,我想將一個組中所有條目的dwLaufmeter加起來。

目標應該是瞭解每個組的dwLaufmeter以及組中所有條目的所有ID。

這兩個選擇在那裏給我正確的數據,但我想在一個SELECT語句中做到這一點。

+4

爲什麼'SELECT ID,(dwStückzahl*dwLänge)AS dwLaufmeter,dwDicke,dwBreite,sAuftrag,sInfo1 FROMtblStückliste'不能滿足您的要求,這是不是很清楚倫斯。發佈某些輸入的預期輸出。 –

+0

也使用GROUP BY功能 –

+2

您實際使用哪種RDBMS?你已經標記了mysql和sql-server,並且你說問題中的Access?這是哪一個?不能全部。 –

回答

1

似乎這是您的解決方案:

SELECT ID, (dwStückzahl*dwLänge) AS dwLaufmeter, dwDicke, dwBreite, SS.sAuftrag, SS.sInfo1 
FROM tblStückliste, 
    (SELECT DISTINCT sAuftrag, sInfo1 FROM tblStückliste) SS 
WHERE sAuftrag = SS.sAuftrag AND sInfo1 = SS.sInfo1 

什麼該查詢所做的是創建一個內部tblStückliste和SS之間的連接

但是,請注意,「最佳實踐」是使用「顯式加入」語法,並且更好地編寫查詢的方法是:

 
SELECT ID, (dwStückzahl*dwLänge) AS dwLaufmeter, dwDicke, dwBreite, SS.sAuftrag, SS.sInfo1 
FROM tblStückliste
INNER JOIN(SELECT DISTINCT sAuftrag, sInfo1 FROM tblStückliste) SS
     ONsAuftrag = SS.sAuftrag AND sInfo1 = SS.sInfo1 

另外,您應該爲每列添加前綴refe由表名或表別名

 
SELECT T.ID, (T.dwStückzahl*T.dwLänge) AS dwLaufmeter, T.dwDicke, T.dwBreite, SS.sAuftrag, SS.sInfo1 
FROM tblStücklisteT 
INNER JOIN(SELECT DISTINCT sAuftrag, sInfo1 FROM tblStückliste) SS
     ONT.sAuftrag = SS.sAuftrag AND T.sInfo1 = SS.sInfo1