2013-05-20 130 views
0

此代碼一直難倒我,我有我試圖找到其中的員工採取了他們記錄了兩個培訓班,該代碼是:IIF THEN MS Access 2010中

SELECT O896IA_VEMPPRSA.EMP_NA, O867IA_VTRAING.SYS_EMP_ID_NR, O867IA_VTRAING.REG_NR,  
O867IA_VTRAING.DIS_NR, O867IA_VTRAING.TNG_SYS_NR 
FROM O896IA_VEMPPRSA INNER JOIN O867IA_VTRAING ON O896IA_VEMPPRSA.SYS_EMP_ID_NR =  
O867IA_VTRAING.SYS_EMP_ID_NR 
WHERE (((O896IA_VEMPPRSA.EMP_EMT_STS_CD)<>"T")) 
GROUP BY O896IA_VEMPPRSA.EMP_NA, O867IA_VTRAING.SYS_EMP_ID_NR, O867IA_VTRAING.REG_NR,  
O867IA_VTRAING.DIS_NR, O867IA_VTRAING.TNG_SYS_NR; 

我需要找到TNG_SYS_NR 1095或1743.如果他們有記錄,那麼我需要一個Y,如果沒有,我需要它顯示N.

我需要它顯示名稱,ID,Reg,Dis,1095 Y或N,1743 Y或N所以如果他們參加了這兩門課程,我只需要一行所有的數據,而Y爲1743 &爲1095.現在,它顯示一名員工列出兩次,Y爲1095 N 1743,N爲1095 Y 1743。

+-----------------------------------+--------------------------------+--------+--------+------+------+ 
|    EMP_NA    |     SYS_EMP_ID_NR | REG_NR | DIS_NR | 1095 | 1743 | 
+-----------------------------------+--------------------------------+--------+--------+------+------+ 
|  AMOS, SHARNELE    |     1531218  |  20 |  10 | N | Y | 
|  AMOS, SHARNELE    |     1531218  |  20 |  10 | Y | N | 
|  ANDERSON JERNAGIN, SHERRY |     0354362  |  25 |  80 | N | Y | 
|  ANDERSON JERNAGIN, SHERRY |     0354362  |  25 |  80 | Y | N | 
|  BAILEY, EDWARD    |     0070433  |  20 |  10 | N | Y | 
|  BAILEY, EDWARD    |     0070433  |  20 |  10 | Y | N | 
+-----------------------------------+--------------------------------+--------+--------+------+------+ 
+0

我想你正在尋找'LEFT JOIN'和'CASE WHEN ... THEN ... END' –

+2

MS Access SQL不支持'CASE WHEN'。 – HansUp

回答

2

你應該能夠使用IIF()得到計算結果:

IIF(O867IA_VTRAING.TNG_SYS_NR IN (1095, 1743), 'Y', 'N') 

因此,如果您添加到您的查詢將是:

SELECT DISTINCT O896IA_VEMPPRSA.EMP_NA, 
    O867IA_VTRAING.SYS_EMP_ID_NR, 
    O867IA_VTRAING.REG_NR,  
    O867IA_VTRAING.DIS_NR, 
    IIF(O867IA_VTRAING.TNG_SYS_NR IN (1095, 1743), 'Y', 'N') 
FROM O896IA_VEMPPRSA 
INNER JOIN O867IA_VTRAING 
    ON O896IA_VEMPPRSA.SYS_EMP_ID_NR = O867IA_VTRAING.SYS_EMP_ID_NR 
WHERE (((O896IA_VEMPPRSA.EMP_EMT_STS_CD)<>"T")); 

編輯的基礎上,你應該能夠在IIF周圍使用綜合功能:

SELECT O896IA_VEMPPRSA.EMP_NA, 
    O867IA_VTRAING.REG_NR, 
    O867IA_VTRAING.DIS_NR, 
    max(IIF(O867IA_VTRAING.TNG_SYS_NR IN (1095), 'Y', 'N')) as Class1095 , 
    Max(IIF(O867IA_VTRAING.TNG_SYS_NR IN (1743), 'Y', 'N')) as Class1743 
FROM O896IA_VEMPPRSA 
INNER JOIN O867IA_VTRAING 
    ON O896IA_VEMPPRSA.SYS_EMP_ID_NR = O867IA_VTRAING.SYS_EMP_ID_NR 
group by O896IA_VEMPPRSA.EMP_NA, O867IA_VTRAING.REG_NR, O867IA_VTRAING.DIS_NR 
+0

雖然 – user2119980

+0

@ user2119980我需要每個課程的專欄你是什麼意思,你需要每個課程的專欄?你想爲'1095'值和'1743'值分開一列。如果是這種情況,那麼你將只使用'IIF'中的一個值並創建兩個計算列。 – Taryn

+0

這工作,但現在它是每個員工重複行。 – user2119980