Sql 我想写一个查询来显示每个提供者在一行上的总数
我有以下数据,我想在一行中显示每个提供商的剩余列、总计列和使用列 提供者名称 供应商 分配 剩下的 全部的 利用 p1 a p1 3801110 6857890 18142110 0.725684 p1 b p1 14341000 6857890 18142110 0.725684 p2 a p2 1946729 14935726.39 15064273.61 0.502142 p2b p2 13117544.61 14935726.39 15064273.61 0.502142 p4 a p4 18415508 20236989 29763011 0.59526 p4 a p4 11347503 20236989 29763011 0.59526Sql 我想写一个查询来显示每个提供者在一行上的总数,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有以下数据,我想在一行中显示每个提供商的剩余列、总计列和使用列 提供者名称 供应商 分配 剩下的 全部的 利用 p1 a p1 3801110 6857890 18142110 0.725684 p1 b p1 14341000 6857890 18142110 0.725684 p2 a p2 1946729 14935726.39 15064273.61 0.502142 p2b p2 13117544.61 14935726.39 15064273.61 0.502142 p4 a p4
您可以通过以下方式获得所需的结果。通过只包含数据的图像,不可能快速测试解决方案,因此这是未经测试的,但希望能让您达到需要的程度
with t as (
select ProviderName, Provider, Allocated, Remaining, Total, Utilised,
Row_Number() over (partition by provider order by ProviderName) rn
from [table]
)
select ProviderName, Allocated,
Iif(rn=1,Remaining,'') Remaining,
Iif(rn=1,Total,'') Total,
Iif(rn=1,Utilised,'') Utilised
from t
order by provider,rn
理想情况下,您不应该在数据层中执行这些操作。您应该在UI层中执行这些操作 您仍然可以使用滞后函数来实现这一点 声明@tableProviderName varchar10,[Provider]varchar10, 分配的bigint, 剩余的bigint, 总比基特, 利用小数点8,7 插入到@table值中 "p1 a","p1",3801110,6857890,18142110,0.725684,, "p1 b","p1","14341000,6857890,18142110,0.725684 ;; 选择providername, case when Allocated=lagAllocated,1按提供者顺序按提供者名称超额分配,然后转换为varchar20,否则转换为varchar20分配为varchar20结束为分配, case when remaining=laglaining,1按提供者顺序按提供者名称超额分配,然后强制转换为varchar20,否则castremaining为varchar20 end为remaining, 当total=lagtotal时,1按提供者顺序按提供者名称超额分配,然后转换为varchar20,否则casttotal转换为varchar20,结束时转换为total, 使用时的情况=LAGUSERED,1供应商订单的超额部分,供应商名称,然后转换为varchar20,否则转换为varchar20,结束时转换为USERED 来自@table 提供者名称 分配 剩下的 全部的 利用 p1 a 3801110 6857890 18142110 0.7256840 p1 b 14341000
您是否考虑过使用行数和大小写表达式?请编辑您的问题,并将您的数据和预期结果显示为文本,而不是图片。在某种程度上更可取,这样我们可以在数据库中轻松创建测试数据。这将使我们很容易为您搜索解决方案您的结果似乎预先假定了排序-每个组的第一行都有值。然而,没有明显的顺序。如何确定哪一行先到?谢谢@sTTu。这很有效。我只需要向varchar添加一个cast,因为值是数值。