簡體   English   中英

選擇具有ID的行,其他列中的值不同SQL Access

[英]Select row with ID, different value in other column SQL Access

我有這個:

ID ABCD 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

它需要做的是始終向我顯示ID的第一條記錄。 如果值ID2更改,那也必須顯示。 所以它應該看起來像這樣:

ID ABCD 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

我已經這樣嘗試過,但是效果不好。 它沒有給我第一個值ID的記錄,並且ID2不變時,我仍然得到雙精度值。

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;

這是我的整個代碼。 所有部分都是必需的,這是它涉及的部分:

 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 ))

你應該用與眾不同的方式

 select distinct ID, ID2
 from your table  

它是基本的GROUP BY

詢問

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

首先,為什么需要這樣的表結構? 也許您應該首先重新考慮數據庫設計。

然后,您可能會執行以下操作:

SELECT DISTINCT ID, ID2
FROM table_name;

要從ao_percentagem9的第一行獲取m.bsn ,請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)
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM