[英]Method to find hits in comma-separated number string on SQL Server
我有一個Windows窗體(c#)應用程序和SQL Server中的一個表,該表具有兩列,如下所示:
ticket (int) | numbers (string)
12345 | '01, 02, 04, 05, 09, 10, 23'
該表可能有100.000行或更多。
我要做的是找到像彩票一樣的命中數量。 例如,我有12個命中,11個命中和9個命中,對於每個抽獎號碼,我都必須搜索12個命中,11個命中或9個命中什么。
那么,獲得這種方法的最佳方法是什么? 我需要最好的表現。
現在,我有以下代碼:
string sentSQL = " SELECT ticket, numbers FROM tableA";
/* CODE TO PERFORM THE CONNECTION */
/*...*/
DbDataReader reader = connection.ExecuteReader();
int hits12, hits11, hits9 = 0;
int count;
while (reader.Read())
{
count = 0;
string numbers = reader["numbers"].ToString();
string ticketNumber = reader["ticket"].ToString();
int maxJ = balls.Count; //balls is the ArrayList with the numbers currently extracted in the raffle
for (int j = 0; j < maxJ; j++)
{
if (numbers.Contains(balls[j].ToString()))
{
count++;
}
}
switch (count)
{
case 12:
hits12++;
break;
case 11:
hits11++;
break;
case 9:
hits9++;
break;
}
}
這是可行的,但也許有更好的方法可以實現。
我正在使用SQL Server 2012,也許有功能對我有幫助嗎?
編輯:我可以在SQL查詢執行SUM
中的CHARINDEX
每個號碼來獲得SQL查詢中點擊量?
您目前有一個完全俗氣的解決方案。
create table ticket (
ticketId int not null -- PK
)
create table TicketNumbers *
ticketId int not null,
numberSelected int not null
)
票證編號具有票證的FK,以及票證編號+已選定號碼的PK。
select t.ticketId, count(*) CorrectNumbers
from ticket t
inner join TicketNumbers tn on tn.ticketId = t.TicketId
where tn.numberSelected in (9, 11, 12, 15) -- list all winning numbers
group by t.ticketId
order by count(*) desc
干杯-
一種改善此問題的簡單方法是更新您的select語句,以僅獲取數字大於您的第一個球號且小於最后一個球號+ 1的記錄。
示例(可能是不正確的SQL):
SELECT ticket, numbers FROM tableA where '10' < numbers and '43' > numbers
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.