.net 如何从SQL Server数据库检索输入最多的值?
如果我有mssql数据库,记录显示如下:.net 如何从SQL Server数据库检索输入最多的值?,.net,sql,vb.net,ado.net,.net,Sql,Vb.net,Ado.net,如果我有mssql数据库,记录显示如下: Id Serv-code Value 1 100 3 2 100 4 3 100 3 4 100 3 5 101 5 6 101
Id Serv-code Value
1 100 3
2 100 4
3 100 3
4 100 3
5 101 5
6 101 5
当我使用serv_code 100搜索记录时所需的逻辑,则输出将是平均值,意味着3将显示在文本框中,因为输入的值3将是4的3倍,如上所示。。。。如果我使用服务代码100搜索记录,并且如果服务代码的值等于3和4,则仅表示最近输入的值将显示在文本框中。您的问题令人困惑。但要用平均值回答该部分: 您应该在数据库端这样做:
CREATE TABLE #Temp (
Id int,
ServCode INT,
Value INT)
INSERT INTO #Temp Values(1,100,3)
INSERT INTO #Temp Values(2,100,4)
INSERT INTO #Temp Values(3,100,3)
INSERT INTO #Temp Values(4,100,3)
INSERT INTO #Temp Values(5,101,5)
INSERT INTO #Temp Values(6,101,5)
select AVG(Value)FROM #Temp WHERE ServCode=100
drop table #Temp
使用此选项在查询中创建一个额外的列,其中包含每行服务代码的平均值:
SELECT T1.*,
(SELECT AVG(Value)
FROM [#Temp] AS T2
WHERE T1.ServCode=T2.ServCode) AS average
FROM [#Temp] AS T1
因为您需要serv code=100(3)的所有记录的平均值。在sql server中创建一个用户定义的函数,该函数将Serv代码作为参数并返回平均值。然后,您可以将旧值与用户想要设置的新值或其他任何值进行比较。我可以使用select查询直接使用平均值函数吗?在数据库中使用哪种数据类型来使用平均值?编辑我的答案以向您展示如何添加额外的平均值列。什么是t1和t2我只有一个表!!
with occurrences as (select value, occurrences, rank() over(order by occurrences desc) as rank
from (select value, count(*) as occurrences
from @data where serv_code = 101 group by value
) count_occurrences
)
select case when (select count(*) from occurrences where rank = 1) > 1
then (select top 1 data.value from @data data join occurrences on data.value = occurrences.value where data.serv_code = 101 and occurrences.rank = 1 order by id desc)
else (select value from occurrences where rank = 1)
end as value;