我正在使用一个表,该表存储对人们进行的问卷调查的结果。每个问题及其结果都存储为一个单独的记录,如下所示。我写了一个CASE
表达式,它根据人们对某些问题的回答创建一个简单的1/0标志。我的结果是这样的。
PersonID Question Answer Flag
---------------------------------------------
1001 Question 1 yes 1
1001 Question 2 3 0
1001 Question 3 1 or more 1
1234 Question 1 no 0
1234 Question 2 2 0
1234 Question 3 none 0
我现在的问题是,如果一个人有哪怕一个标记的回答,我需要标记他们的整个问卷。我一直在寻找这个问题的其他例子——这个正在处理几乎完全相同的事情,但我不一定想实际上将我的结果分组,因为我仍然希望能够看到单个问题的标志("哦,这个人的问卷被标记了,让我们看看是针对哪个问题的,他们的回答是什么"(。我知道这可能不是最有效的方法,但我希望能得到这样的结果:
PersonID Question Answer Flag Overall
--------------------------------------------------------
1001 Question 1 yes 1 1
1001 Question 2 3 0 1
1001 Question 3 1 or more 1 1
1234 Question 1 no 0 0
1234 Question 2 2 0 0
1234 Question 3 none 0 0
这就是我的问题所在。它可以很好地标记单个问题,但我不确定应该采取什么步骤才能根据单个答案标记整个问卷。我应该看什么样的逻辑/语法?
SELECT
PersonID,
QuestionDescription as Question,
ResultValue as Answer,
(CASE
WHEN (QuestionDescription LIKE '%ion 1%' AND ResultValue = 'yes') THEN 1
WHEN (QuestionDescription LIKE '%ion 2%' AND ResultValue >= 5) THEN 1
WHEN (QuestionDescription LIKE '%ion 3%' AND ResultValue = '1 or more') THEN 1
ELSE 0
END) as Flag
FROM Questionnaire
ORDER BY PersonID, QuestionDescription
最简单的方法是,您可以将人员分区中的标志相加,并查看它们的总和是否为0:
WITH x AS
(
SELECT
PersonID,
QuestionDescription as Question,
ResultValue as Answer,
CASE
WHEN (QuestionDescription LIKE '%ion 1%' AND ResultValue = 'yes') THEN 1
WHEN (QuestionDescription LIKE '%ion 2%' AND ResultValue >= 5) THEN 1
WHEN (QuestionDescription LIKE '%ion 3%' AND ResultValue = '1 or more') THEN 1
ELSE 0
END as Flag
FROM Questionnaire
)
SELECT
*,
CASE WHEN SUM(Flag) OVER(PARTITION BY PersonID) > 0 THEN 1 ELSE 0 END as Overall
FROM
x
SUM(...) OVER(...)
有点像执行以下操作:
WITH x AS (
--your existing query here
)
SELECT *, CASE WHEN SumFlag > 0 THEN 1 ELSE 0 END as OVerall
FROM
x
INNER JOIN
(SELECT PersonId, SUM(Flag) AS SumFlag FROM X GROUP BY PersonId) y ON x.PersonId = y.PersonId
即SUM OVER对PersonId进行分组,然后将结果自动连接回分组对象(PersonId(的每一行-它们是非常强大和有用的东西,这些窗口函数
如果你不能继续使用窗口函数(SUM OVER(方法,后一种形式(单独的查询分组并重新加入(也会起作用——这类似于datarocker在他们的答案中指出的内容