我正在尝试根据某些标准来确定每个用户剩余的课程。我收到2个数据集。我想使用MS Access 2013来处理数据。
数据集1:所有用户的主列表
数据集2:每个用户的课程完成列表
根据用户所属的类别确定他们需要完成的课程。数据集并不完全干净也不完美。
数据集1
NAME CATEGORY
TOASTER, OVEN 3
MICRO, WAVE 2
WHITE, BOARD 1
MOUSE, PAD 1
KEY, BOARD 4
PHONE, CHARGER 2
WATER, BOTTLE 2
数据集2
NAME COURSE DATE
TOASTER, OVEN 3A 2000-05-05
TOASTER, OVEN 3B 2019-03-02
TOASTER, OVEN 3A 2018-11-05
MICRO, WAVE 2A 2017-10-20
WHITE, BOARD 1A 2018-01-10
KEY, BOARD 3A-1 2019-01-15
PHONE, CHARGER 2A-1 2018-09-17
WATER, BOTTLE 2A-CL 2015-06-26
WATER, BOTTLE 2A 2011-12-15
所需结果
NAME CATEGORY REQUIREMENT STATUS
TOASTER, OVEN 3 ADVANCED COMPLETED
MICRO, WAVE 2 INTERMEDIATE COURSE 2 REMAINING
WHITE, BOARD 1 INTRODUCTORY COMPLETED
MOUSE, PAD 1 INTRODUCTORY NOT COMPLETED
KEY, BOARD 4 ADVANCED COURSE 1 REMAINING
PHONE, CHARGER 2 INTERMEDIATE COURSE 2 REMAINING
WATER, BOTTLE 2 INTERMEDIATE COMPLETED
基于2个数据集,我希望期望的结果显示数据集1的另外2列。
逻辑:
如果为CATEGORY = 3
,则为REQUIREMENT = ADVANCED
。
如果为CATEGORY = 2
,则为REQUIREMENT = INTERMEDIATE
。
如果为CATEGORY = 1
,则为REQUIREMENT = INTRODUCTORY
。
这种逻辑,我可以执行。
如果REQUIREMENT = ADVANCED
,则检查Data Set 2
,看是否存在路线3A AND 3B
,OR if 3A-CL
,OR if 3A-EQ
,然后STATUS = COMPLETED
,其他{ {1}},然后说IF ONLY 3A exists
,然后说Course 2 Remaining
,然后说IF ONLY 3B exists
。
如果Course 1 Remaining
,则检查REQUIREMENT = INTERMEDIATE
以查看路线Data Set 2
,2A and 2B exist
,OR if 2A-CL
是否存在,然后OR if 2A-EQ
,其他{{ 1}},然后说STATUS = COMPLETED
,然后说IF ONLY 2A exists
,然后说Course 2 Remaining
。
如果为IF ONLY 3B exists
,则检查Course 1 Remaining
,看看是否REQUIREMENT = INTRODUCTORY
,然后为Data Set 2
,否则为Course 1A OR 1A-CL OR 1A-EQ exist
。
请让我知道是否需要澄清任何内容。
在此方面,我将不胜感激!
答案 0 :(得分:1)
一种方法是对第二个数据集进行多次联接。此示例包括完成任务所需的所有元素。您只需要将其扩展到所需逻辑的其余部分即可:
SELECT T1.NAME,
T1.CATEGORY,
ISNULL(IS_3A.DATE) AS EXISTS_3A_EXAMPLE,
NOT (ISNULL(IS_3A.DATE) OR ISNULL(IS_3B.DATE)) AS EXISTS_3A_AND_3B_EXAMPLE
FROM (( [DATA SET 1] T1
LEFT JOIN [DATA SET 2] IS_3A ON IS_3A.COURSE='3A' AND T1.NAME=IS_3A.NAME )
LEFT JOIN [DATA SET 2] IS_3B ON IS_3B.COURSE='3B' AND T1.NAME=IS_3B.NAME )
LEFT JOIN [DATA SET 2] IS_3A_CL ON IS_3A_CL.COURSE='3A-CL' AND T1.NAME=IS_3A_CL.NAME