2017-02-07 1 views
-1

Ich habe diese:Wählen Sie die Zeile mit der ID, anderen Wert in anderen Spalte SQL Zugriff

ID A B C D ID2
1 | 1 | 1 | 1 | 1 | 1
1 | 1 | 1 | 1 | 1 | 1
1 | 1 | 1 | 1 | 1 | 2
1 | 1 | 1 | 1 | 1 | 3
2 | 1 | 1 | 1 | 1 | 1
2 | 1 | 1 | 1 | 1 | 2
2 | 1 | 1 | 1 | 1 | 3
3 | 1 | 1 | 1 | 1 | 1
3 | 1 | 1 | 1 | 1 | 1
3 | 1 | 1 | 1 | 1 | 1
3 | 1 | 1 | 1 | 1 | 2
3 | 1 | 1 | 1 | 1 | 2
3 | 1 | 1 | 1 | 1 | 2

Was es tun muss, ist mir immer die erste Aufzeichnung der ID zu zeigen. Ändert sich der Wert ID2, muss auch dieser angezeigt werden. So sollte es so aussehen:

ID A B C D ID2
1 | 1 | 1 | 1 | 1 | 1
1 | 1 | 1 | 1 | 1 | 2
1 | 1 | 1 | 1 | 1 | 3
2 | 1 | 1 | 1 | 1 | 1
2 | 1 | 1 | 1 | 1 | 2
2 | 1 | 1 | 1 | 1 | 3
3 | 1 | 1 | 1 | 1 | 1
3 | 1 | 1 | 1 | 1 | 2

Ich habe es so versucht, aber das funktioniert nicht gut. Es gibt mir nicht die erste Aufzeichnung einer Wert-ID, und ich bekomme immer noch doppelte Werte, während ID2 sich nicht ändert.

SELECT 
IIf(IsNull(m.bsn),'',CStr(m.bsn)) AS BSN, 
IIf(IsNull(m.uitkering),'',CStr(m.uitkering)) AS Uitkering, 
IIf(IsNull(m.ingangsdatum),'',Format(m.ingangsdatum,'dd-mm-yyyy')) AS IngangsdatumUitkering, 
IIf(IsNull(m.eerste_ziektedag),'',Format(m.eerste_ziektedag,'dd-mm-yyyy')) AS EersteZiektedag, 
IIf(IsNull(m.ingangsdatum_w),'',Format(m.ingangsdatum_w,'dd-mm-yyyy')) AS DatumWijziging, 
IIf(IsNull(m.ao_percentage),'',CStr(m.ao_percentage)) AS PercentageUitkering 

FROM (((mutatie_historie AS m LEFT JOIN recht_soorten AS rs ON rs.recht_soort_id = m.recht_soort_id) 
          LEFT JOIN uitkering_soorten AS us ON us.uitkering_soort_id = m.uitkering_soort_id) 
          LEFT JOIN ao_klassen AS aok ON aok.ao_klasse_id = m.ao_klasse_id) 
          LEFT JOIN kenmerk_percentage_uitkering AS kpu ON kpu.kenmerk_code = m.kenmerk_code 

WHERE m.ongemax_dagloon > '0' 

AND (m.ao_percentage <> (SELECT TOP 1 m9.ao_percentage FROM mutatie_historie m9 WHERE m.bsn < m9.bsn AND m.ingangsdatum_w < m9.ingangsdatum_w)) 

AND not exists 
(SELECT null FROM mutatie_historie m2 WHERE m2.aanlevering > m.aanlevering  AND m2.ingangsdatum_w <= m.ingangsdatum_w AND m2.bsn = m.bsn AND 
    (SELECT Iif(IsNull(m3.uitkering), '', m3.uitkering) FROM mutatie_historie m3 WHERE m3.bsn = m2.bsn AND m3.aanlevering = m2.aanlevering AND m3.keynummer = 
     (SELECT min(keynummer) FROM mutatie_historie m4 WHERE m4.bsn = m3.bsn AND m4.aanlevering = m3.aanlevering AND m4.uitkering is not null)) = 
      (SELECT Iif(IsNull(m3.uitkering), '', m3.uitkering) FROM mutatie_historie m3 WHERE m3.bsn = m.bsn AND m3.aanlevering = m.aanlevering AND m3.keynummer = 
       (SELECT min(keynummer) FROM mutatie_historie m4 WHERE m4.bsn = m3.bsn AND m4.aanlevering = m3.aanlevering AND m4.uitkering is not null))) 

ORDER BY m.bsn, m.ingangsdatum_w, m.ao_percentage DESC; 

Das ist mein ganzer Code. Alle Teile sind notwendig, ist dies der Teil ist es im Begriff ist:

AND (m.ao_percentage <> (SELECT TOP 1 m9.ao_percentage FROM mutatie_historie m9 WHERE m.bsn < m9.bsn AND m.ingangsdatum_w < m9.ingangsdatum_w)) 
+0

'eindeutige ID wählen, von tablename' ID2. – jarlh

+0

Ihre Abfrage erwähnt 3 Spalten, während Beispieldaten nur 2 Spalten haben. Zeige echte Tabellenstruktur. – Serg

+0

Reale Tabellenstruktur hat 6 Spalten, aber die Überprüfung erfolgt über Spalte BSN und Spalte ao_percentage, die anderen Spalten dienen nur zur Information. – user7219039

Antwort

1

Es ist ein Grund GROUP BY.

Abfrage

SELECT ID, ID2 
FROM your_table_name 
GROUP BY ID, ID2 
ORDER BY ID, ID2; 
+0

Ich würde sagen, es ist ein einfaches 'select distinct' ... – jarlh

+0

@ Jarlh: Ja .. Es kann .. – Wanderer

2

shuold Sie verschiedene verwenden

select distinct ID, ID2 
from your table 
0

Zunächst einmal, warum Sie eine Tabellenstruktur wie diese brauchen? Vielleicht sollten Sie zuerst Ihr Datenbankdesign überdenken.

Dann, was Sie tun könnten, ist dies:

SELECT DISTINCT ID, ID2 
FROM table_name; 
+0

Die Datenbank existiert so seit Jahren, es ist nicht meins. Ich muss nur ein paar Daten herausholen. Es gibt eine Datenbank (mutatie_historie), aber es gibt eine Eingabe, die Daten überschreibt. Darum geht es im folgenden Teil, um alle aktuellen Daten und nicht alle Daten für eine BSN zu erhalten. – user7219039

0

Um ao_percentage aus der ersten Reihe von m9 zu erhalten, die m.bsn exeeds, m.ingangsdatum_w

... 
(SELECT TOP 1 m9.ao_percentage FROM mutatie_historie m9 WHERE m.bsn < m9.bsn AND m.ingangsdatum_w < m9.ingangsdatum_w ORDER BY m9.bsn, m9.ingangsdatum_w) 
... 
Verwandte Themen