Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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
C# 在Transact-SQL上:可以生成一条语句来创建一个新列,同时使用来自同一表的另一列的数据。_C#_Sql_Database_Tsql_Sql Server 2012 - Fatal编程技术网

C# 在Transact-SQL上:可以生成一条语句来创建一个新列,同时使用来自同一表的另一列的数据。

C# 在Transact-SQL上:可以生成一条语句来创建一个新列,同时使用来自同一表的另一列的数据。,c#,sql,database,tsql,sql-server-2012,C#,Sql,Database,Tsql,Sql Server 2012,在Transact-SQL上:如果要创建一条语句将列添加到当前活动表中,则新添加的列将从同一表的另一列获取数据。它将在每一行上添加数据,并在新列上汇总 更具体地说, 我在一家生产红薯薯条的公司工作,我们用标签来描述每个盒子的内容 我有一个表格,当打印标签时,表格会更新和填充,标签会放在每个盒子上;所以标签数量==我们生产的盒子数量。表中有一列描述每个箱子的重量;命名为[CaseWeight]的列 我想把这个casewweight列在一个新列上做一个Sum[casewweight],称之为tota

在Transact-SQL上:如果要创建一条语句将列添加到当前活动表中,则新添加的列将从同一表的另一列获取数据。它将在每一行上添加数据,并在新列上汇总

更具体地说,

我在一家生产红薯薯条的公司工作,我们用标签来描述每个盒子的内容

我有一个表格,当打印标签时,表格会更新和填充,标签会放在每个盒子上;所以标签数量==我们生产的盒子数量。表中有一列描述每个箱子的重量;命名为[CaseWeight]的列


我想把这个casewweight列在一个新列上做一个Sum[casewweight],称之为total pounds。但仍然可以看到表中的其余列

您可以使用具有窗口功能的视图:

create view v_t as
    select t.*, sum(weight) over () as total_pounds
    from t;

您不能将窗口函数作为生成的列放入,因此这可能是最好的方法。

您可以将视图与窗口函数一起使用:

create view v_t as
    select t.*, sum(weight) over () as total_pounds
    from t;

无法将窗口函数作为生成的列放入,因此这可能是最好的方法。

若要将列添加到表中,可能需要删除该表,具体取决于服务器设置。在这种情况下,我要做的是将表中的数据备份到另一个表中,然后从MyTable中选择*到MyTableBackup。然后我删除表并使用新列重新创建它注意:在删除和重新创建表时,不要忘记重新创建索引和键!。然后我从备份表插入到新表。在求和时,您可以按插入进行分组。因此,如果您想要订单中每个包裹的重量总和,您可以执行以下操作:

    SELECT SUM(CaseWeight) AS TotalPounds FROM MyTableBackup GROUP BY OrderNumber
<>你可以把它放在选择的中间:

    INSERT INTO MyTable
    SELECT
        bak.OrderNumber
        ,bak.NumberOfCases
        ,bak.CaseWeight
        ,(SELECT SUM(CaseWeight) FROM MyTableBackup b WHERE b.OrderNumber = bak.OrderNumber GROUP BY OrderNumber) AS TotalPounds
    FROM MyTableBackup bak

只需确保在执行拖放和插入操作之前测试查询的select部分。

若要向表中添加列,可能需要删除表,具体取决于服务器设置。在这种情况下,我要做的是将表中的数据备份到另一个表中,然后从MyTable中选择*到MyTableBackup。然后我删除表并使用新列重新创建它注意:在删除和重新创建表时,不要忘记重新创建索引和键!。然后我从备份表插入到新表。在求和时,您可以按插入进行分组。因此,如果您想要订单中每个包裹的重量总和,您可以执行以下操作:

    SELECT SUM(CaseWeight) AS TotalPounds FROM MyTableBackup GROUP BY OrderNumber
<>你可以把它放在选择的中间:

    INSERT INTO MyTable
    SELECT
        bak.OrderNumber
        ,bak.NumberOfCases
        ,bak.CaseWeight
        ,(SELECT SUM(CaseWeight) FROM MyTableBackup b WHERE b.OrderNumber = bak.OrderNumber GROUP BY OrderNumber) AS TotalPounds
    FROM MyTableBackup bak

只需确保在执行拖放和插入操作之前测试查询的select部分。

我在考虑可能采取另一种方法,可能使用连接,例如自连接。它允许我将表本身连接起来。但我对创建自连接语句不太熟悉,所以我对它的样子有点困惑。@BayronPerdomo。不需要自联接。窗口函数通常更快。我在考虑可能采取另一种方法,可能使用连接,例如自连接。它允许我将表本身连接起来。但我对创建自连接语句不太熟悉,所以我对它的样子有点困惑。@BayronPerdomo。不需要自联接。窗口功能通常更快。另外,在开始之前,请确保在执行类似操作之前有一个有效的备份!另外,在这之前,请先说一句显而易见的话——在做类似的事情之前,请确保您有一个有效的备份!