【问题标题】:Azure SQL Database: how to perform calculations on the data I'm queryingAzure SQL 数据库:如何对我正在查询的数据执行计算
【发布时间】:2021-09-07 09:55:46
【问题描述】:

我正在将数据从我的DataGrid 导出到 Azure SQL 数据库表。 但我需要对其进行操作并进行一些数学运算。

我希望通过查询可以做到的是:

  • 按 Column1 对数据进行排序(20 个条目,每个条目数百行)
  • 添加第 2 列、第 3 列和第 4 列中所有单元格的内容
  • 创建两个新列,X 和 Y
  • 设置X列的内容为(Column1 * ColumnY / 100)
  • 将Y列的内容设置为8

我希望我的表只填充 20 行,这是 Column1 中每个条目的所有数百行的汇总。

试图了解这是否可能与查询有关。 我不想在DataGrid 中“手动”执行此操作。 希望能得到一两个关于如何解决这个问题的指针。

【问题讨论】:

  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
  • "(20 个条目,每个有几百行)" 嗯?怎么会同时有20行和100行..?
  • "设置X列的内容为(Column1 * ColumnY / 100)" 那么Column1 * ColumnY / 100有什么问题呢?为什么这不起作用?
  • 我将尝试编辑我的问题以澄清一些事情。

标签: c# sql-server math azure-sql-database


【解决方案1】:

您的数据可能使用CHAR(13) 控制字符作为回车符(换行符),以便在单列中获取不同行中的值。

还有其他不同的控制字符可用here

下面是计算数据的示例(数据有 5 行,Col1 有 2 行)。

  1. 将 Col1 值从 CHAR(13) 替换为逗号 (',')。这会将列单个字符串中的所有行以逗号分隔。

    update #abc
    set Col1 = replace(Col1,CHAR(13),',')
    

  1. 添加 row_number() 以获取所有行的 ID 值(如果您有任何唯一列供以后使用,则可选)。

     select *, ROW_NUMBER() over(order by Col1, col2, col3, col4) as rn  
     into #abc1 
     from #abc
     select * from #abc1
    

  1. 现在将 Col1 的值拆分为多行,并通过按其他列分组来求和。

如果需要,您可以对其他列执行类似的操作。

select rn, sum(convert(int,S1.value)) as col1, Col2, Col3, Col4, created_date   
into #abc2 
from #abc1 a
cross apply STRING_SPLIT(a.Col1, ',') as S1
group by rn, col2, col3, col4, created_date
order by rn

  1. 现在添加 2 个新列 ColX 和 ColY。由于您将 ColY 的值硬编码为“8”,因此您可以在计算 ColX 时将 ColY 值替换为 8。

    select col1, Col2, Col3, Col4
    ,(Col1*8/100) as ColX, convert(int,'8') as ColY
    from #abc2
    order by col1 --Sort by Col1
    

从列表中选择需要的列按Col1排序得到最终结果。

【讨论】:

    猜你喜欢
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多