我有一个SQL表,其值为2的幂(这基本上是多项选择题答案)
ID | Value | Answer | QuestionId
1 | 1 | Answer 1 | 1
2 | 2 | Answer 2 | 1
3 | 4 | Answer 3 | 1
4 | 8 | Answer 4 | 1
我有另一张表,其中包含用户选择的选项。但总结了这些选择。就像用户只选择了第一个选项一样,如果用户选择了第一个和第二个,则结果为1,结果为3.如果用户选择了第一个和第三个,则结果为5,依此类推。
QuestionId | Result
1 | 3
2 | 1
我想取回从此结果中选择的选项。我怎么能在SQL
中做到这一点如果问题不明确,请告诉我。
答案 0 :(得分:3)
由于您只有四个可能的答案,最简单的解决方案(以后读取代码时最容易理解)可能只是创建一个值为0-15的查找表作为键,另外四列的值显示为根据每个键选择了哪些答案。它不像位掩码那么优雅,但我认为你的维护程序员可能会在以后感谢你。
答案 1 :(得分:0)
您可以使用
之类的表达式select cast(Result::bit(4) & B'0001' as int)
union select cast(Result::bit(4) & B'0010' as int)
union select cast(Result::bit(4) & B'0100' as int)
union select cast(Result::bit(4) & B'1000' as int);
(这适用于Postgres;根据需要进行调整。)
答案 2 :(得分:0)
@AlexK,是的,它是用bitmasked来编写的。这是在C#代码中完成的。现在我们需要在SQL中进行分解。我怎么能这样做?
使用&
:
CREATE TABLE T(ID INT, Value INT) INSERT T VALUES
(1, 1),
(2, 2),
(3, 4),
(4, 8)
DECLARE @CHOICE INT = 1 | 4
SELECT * FROM T
WHERE
@CHOICE & Value != 0
有关
ID Value
1 1
3 4