0

このコードはいつも私を悩ませてきました.私は2つのトレーニングコースを持っています.どの従業員がそれらを受講したかの記録を見つけようとしています.コードは次のとおりです.

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 を表示する必要があります。したがって、両方のコースを受講した場合、すべてのデータを含む 1 つの行と、1743 および 1095 の Y が必要です。従業員が 1095 N 1743 の Y と 1095 Y 1743 の N を 2 回リストした場合、両方を取得した場合。

+-----------------------------------+--------------------------------+--------+--------+------+------+
|                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    |
+-----------------------------------+--------------------------------+--------+--------+------+------+
4

1 に答える 1

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
于 2013-05-20T15:37:51.830 に答える