我的表有5列(ID,UserId,问答,WebEnabled)。
“UserId”是FK,此表实际上解决了多值属性问题。
以下是示例数据:
Id UserId Question Answer WebEnabled
1 1 Q1 Ans1 1
2 1 Q2 Ans2 1
3 2 Q1 Ans1 1
4 2 Q4 Ans4 1
5 3 Q1 Ans1 1
6 3 Q3 Ans3 1
7 3 Q2 Ans2 0
8 4 Q5 Ans5 0
我需要使用AND运算符执行搜索功能。
例如,用户从网络下拉菜单中输入Q1和Q2将需要返回所有有问题的Q1和Q2的userId。
请帮助。
修改
Q1,Q2可以是任意数量的参数(比如Q1,Q2,Q3,Q4),查询应该使用AND并返回UserID。
答案 0 :(得分:1)
我不太明白你的问题。下面的陈述将得到你所要求的答案,但似乎这可能不是你想要的?
SELECT DISTINCT UserId
FROM Table
WHERE Question='Q1'
OR
Question='Q2'
答案 1 :(得分:1)
将问题组合成一个字符串,用逗号分隔,并确保值不重复,如下所示:
DECLARE @SearchString VARCHAR(100);
DECLARE @NumberOfValues INT;
Set @SearchString = 'Q1,Q2,Q3,Q4';
Set @NumberOfValues = 4;
然后运行这个简单的SQL语句:
SELECT Table1.* FROM
Table1, (SELECT UserId, Count(DISTINCT Question) Cnt
From Table1
WHERE @SearchString LIKE '%' + RTRIM(Question) + '%'
GROUP BY UserID
HAVING Count(DISTINCT Question) = @NumberOfValues) AS T
WHERE Table1.UserId = T.UserId
答案 2 :(得分:1)
您可以使用PIVOT运算符在数据上创建一个数据透视,从而导致Q1,Q2,Q3,... Q5显示为每次用户回答该问题时每个数下都有计数的列。然后使用过滤器Q1和Q2 = 1从枢轴集查询。您可以在此处运行以下示例:http://sqlfiddle.com/#!3/6a31d/8
WITH UserQuestionsPivot AS
(
SELECT
UserId,
Q1,Q2,Q3,Q4,Q5
FROM
(
SELECT
UserId,
1 AS Answered,
Question
FROM UserQuestions
) AS SourceTable
PIVOT
(
SUM(Answered)
FOR Question IN ([Q1], [Q2], [Q3], [Q4], [Q5])
) AS PivotTable
)
SELECT
*
FROM UserQuestionsPivot
WHERE Q1 = 1 AND Q2 = 1