因此,我需要生成一个查询,以将用户输入的数据引用到用户表单中。该表单是一个复选框类型,如果未选择任何值,则应输入一个复选框,上面写着“ None of the above”。该表格分为4个不同的部分,每个部分都需要在相关的方框中打勾,或者如果没有相关的方框,则每个部分的该部分的“以上都不是”框中都应打勾。
现在,我正在查看后台的表,并试图构造一个查询来突出显示一个或多个部分中的一个框,甚至没有“ None of the above”框都没有打勾的记录。
本质上,我们希望确保表单(每个表单都有其自己的ID)已完全填充。
就本网站而言,假设我的数据都在一个表中:
有什么主意我可以构造这个查询吗?
在上面的示例中,我想标识客户789,因为他们缺少第3部分的值
这是我正在尝试做的简化版本,但希望会清楚
答案 0 :(得分:0)
理想情况下,您的输入表单将具有不允许这样做的验证。但是,我意识到这可能不受您的控制。这将适用于您提供的简化示例。希望您可以根据需要进行修改。
语法可能会有所不同,具体取决于您的数据库平台。这是在SQL Server上。
CREATE TABLE #Section (ID INT)
INSERT INTO #Section (ID) VALUES (1)
INSERT INTO #Section (ID) VALUES (2)
INSERT INTO #Section (ID) VALUES (3)
INSERT INTO #Section (ID) VALUES (4)
CREATE TABLE #CustomerResponse (CustomerID INT, FormID INT, SectionID INT, value VARCHAR(25))
INSERT INTO #CustomerResponse (CustomerID, FormID, SectionID, value) VALUES (789, 1, 1, '1')
INSERT INTO #CustomerResponse (CustomerID, FormID, SectionID, value) VALUES (789, 1, 2, 'none of the above')
INSERT INTO #CustomerResponse (CustomerID, FormID, SectionID, value) VALUES (789, 1, 4, '1')
INSERT INTO #CustomerResponse (CustomerID, FormID, SectionID, value) VALUES (454, 2, 1, '1')
INSERT INTO #CustomerResponse (CustomerID, FormID, SectionID, value) VALUES (454, 2, 2, '1')
INSERT INTO #CustomerResponse (CustomerID, FormID, SectionID, value) VALUES (454, 2, 3, '1')
INSERT INTO #CustomerResponse (CustomerID, FormID, SectionID, value) VALUES (454, 2, 4, '1')
SELECT DISTINCT cr1.CustomerID, cr1.FormID, 1 AS MissingSection FROM #CustomerResponse cr1
LEFT JOIN #CustomerResponse cr2 ON cr1.CustomerID = cr2.CustomerId AND cr2.SectionID = 1
WHERE cr2.CustomerID IS null
UNION
SELECT DISTINCT cr1.CustomerID, cr1.FormID, 2 AS MissingSection FROM #CustomerResponse cr1
LEFT JOIN #CustomerResponse cr2 ON cr1.CustomerID = cr2.CustomerId AND cr2.SectionID = 2
WHERE cr2.CustomerID IS null
UNION
SELECT DISTINCT cr1.CustomerID, cr1.FormID, 3 AS MissingSection FROM #CustomerResponse cr1
LEFT JOIN #CustomerResponse cr2 ON cr1.CustomerID = cr2.CustomerId AND cr2.SectionID = 3
WHERE cr2.CustomerID IS null
UNION
SELECT DISTINCT cr1.CustomerID, cr1.FormID, 4 AS MissingSection FROM #CustomerResponse cr1
LEFT JOIN #CustomerResponse cr2 ON cr1.CustomerID = cr2.CustomerId AND cr2.SectionID = 4
WHERE cr2.CustomerID IS null
我不喜欢这种解决方案,但是它确实有效。也许有人会带来更好的东西。