我在SQLServer数据库中有一个模拟宾果卡的表。共有25个字段代表卡上的数字:n1, n2, n3, ..., n25
假设我抽奖数字5、28和67,如果存储在桌上的卡片与字段和数字匹配,如何进行选择?
结果将是
Card | Matchs
1 | 3
2 | 3
3 | 2
4 | 1
5 | 1
6 | 1
有什么建议吗?谢谢。
答案 0 :(得分:1)
您应该修复数据模型,以使值位于列而不是行中。 SQL Server使得使用apply
取消数字的转换非常容易,因此您可以解决此问题:
select b.*, s.cnt
from bingo b cross apply
(select count(*) as cnt
from (values (n1), (n2), . . ., (n25)) v(n)
where n in (5, 28, 67)
) s;
填写. . .
中的其余数字。