2017-08-02 13 views
1

我的數據庫看起來像這樣訪問:結合項目與重複字段

數據:

ID | Number | A | Version 
1 | N123 | K | 1 
2 | N123 | O | 1 
3 | N123 | O | 2 
4 | N123 | K | 2 
5 | N234 | K | 1 
6 | N234 | O | 1 
7 | N456 | K | 1 
8 | N456 | L | 1 
9 | N456 | K | 2 
10 | N456 | L | 2 

我的結果應該是這樣的:

Number | A | Version 
N123 | O, K | 2 
N234 | O, K | 1 
N456 | K, L | 2 

這意味着我有重複的表與數字(和版本)相關的條目。例如:N123在版本1中存在兩次.A = K時一次,A = O時一次。結合我有N123(V1)與K = A和O.該捆綁在版本2中有一個副本。 我想查詢的是最高版本和K的組合,因此我沒有重複的條目了。

數據的方式是從更大的數據源查詢的結果。也許該解決方案能夠成爲這個初始查詢中:

SELECT Data.[Number], Data.[Version], Data.[K] 
FROM Data 
WHERE (((Data.[Number]) In (SELECT [Number] FROM [Data] As Tmp GROUP BY [Number],[Version] HAVING Count(*)>1 And [Version] = [Data].[Version]))) 
ORDER BY Data.[Number], Data.[Version]; 
+0

mysql還是訪問? –

+0

只是訪問 - 對不起,激怒 – PhilHar

+0

MS Access沒有'group_concat()'或類似的東西。這在數據庫中非常困難。 –

回答

0

當我在我的評論說,OleDb的目的有沒有辦法解決,我是假設[A]中包含未知的(和無限的)數量的可能性。但是,如果[A]實際上是一個枚舉,則可以使用SQL在MS Access中實現串聯,而無需藉助自寫功能。您可以使用LEFT序列JOINS做到這一點:

SELECT Number, ConcatKLO, MAX(version) AS MaxVersion FROM 
(SELECT number, version, left(ConcatA,Len(ConcatA) -2) as ConcatKLO FROM 
(SELECT d.number, d.version, IIF(k.A IS NULL, "",k.A + ", ") + IIF(l.A IS NULL, "",l.A + ", ") + IIF(o.A IS NULL, "",o.A + ", ") AS ConcatA FROM 
(((SELECT DISTINCT number, version FROM Data) as d 
LEFT JOIN 
(SELECT number, A, version FROM Data WHERE A = 'K') as k 
ON d.number = k.number and d.version = k.version) 
LEFT JOIN 
(SELECT number, A, version FROM Data WHERE A = 'O') as o 
ON d.number = o.number and d.version = o.version) 
LEFT JOIN 
(SELECT number, A, version FROM Data WHERE A = 'L') as l 
ON d.number = l.number and d.version = l.version) as c) as a 
GROUP BY Number, concatklo 

與OLEDB通話的問題是,你只能使用內置的Access引擎功能。

1

使用GROUP_CONCATCONCAT功能與MAXGROUP BY一起實現這一目標。

SELECT Number, 
GROUP_CONCAT(A) AS A, 
MAX(Version) AS Version 
FROM data 
WHERE CONCAT(Version,'-',Number) IN (SELECT CONCAT(MAX(Version),'-',Number) FROM data GROUP BY Number) 
GROUP BY Number 
ORDER BY Number 

輸出

Number A Version 
N123 O,K 2 
N234 K,O 1 
N456 K,L 2 

SQL小提琴:http://sqlfiddle.com/#!9/c556b6/40/0

+0

訪問中沒有group_concat() – PhilHar

+0

您將問題標記爲MySQL – Matt

+0

不僅MySql - MS-Access也是如此。對不起!我認爲這很熟悉 – PhilHar