Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我想写一个查询来显示每个提供者在一行上的总数_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 我想写一个查询来显示每个提供者在一行上的总数

Sql 我想写一个查询来显示每个提供者在一行上的总数,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

我有以下数据,我想在一行中显示每个提供商的剩余列、总计列和使用列

提供者名称 供应商 分配 剩下的 全部的 利用 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.59526
您可以通过以下方式获得所需的结果。通过只包含数据的图像,不可能快速测试解决方案,因此这是未经测试的,但希望能让您达到需要的程度

    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,因为值是数值。