Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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_Sql Server 2012 - Fatal编程技术网

Sql 如何在同一代码中插入列并更新它们

Sql 如何在同一代码中插入列并更新它们,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,先谢谢你 我有一张表1: Name || Name.val ABC002 || layer1 ABC002 || layer2 ABC002 || layer3 ABC002 || layer4 ABC002 || layer5 ABC002 || layer6 DEF001 || layer7 DEF001 || layer8 DEF001 || layer9 DEF001 || layer10 DEF001 || l

先谢谢你

我有一张表1:

Name    ||   Name.val
ABC002  ||   layer1
ABC002  ||   layer2
ABC002  ||   layer3
ABC002  ||   layer4
ABC002  ||   layer5
ABC002  ||   layer6
DEF001  ||   layer7
DEF001  ||   layer8
DEF001  ||   layer9
DEF001  ||   layer10
DEF001  ||   layer11
输出表为:

Name    ||   Count_name   ||  batch_count
ABC002  ||   06           ||  01
DEF001  ||   05           ||  01
查询是:

 select Name, count(Name) as Count_name, count(distinct Name) as batch_count
 from table1
 group by Name.
这些列不在表中,但应单独添加到查询中

我想知道如何将这些列count\u namebatch\u count添加(插入/更新)到表1中 并将这些值插入表中

这些列不在表中,但应单独添加到查询中

它们在“名称”列中也可以为空值。可以有两个不同的名称,也可以只有一个名称


谢谢

您可以通过使用简单的查询获得所需内容,无需向表中添加列

这几乎可以解决问题:

-- Query solution - doesn't work
select  name
        ,[Name.val]
        ,count(*) over (partition by name) Count_name
        ,count(distinct name) over (partition by name) batch_count
from table1
但在分析函数中不能计算(不同)。此查询提供了我认为您想要的结果:

-- Query solution Works
select  name
        ,[Name.val]
        ,count(*) over (partition by name) Count_name
        ,dense_rank() over (partition by Name  order by Name) +
        dense_rank() over (partition by Name order by Name desc) -1  batch_count
from table1
现在,如果要将列添加到表中,请执行以下操作:

-- Add Columns
alter table table1 add Count_name int;
alter table table1 add batch_count int;
要在列中输入值,请执行以下操作:

update tab
 set Count_name=b.Count_name
 ,batch_count=b.batch_count
from
table1 tab
inner join
(
select Name, count(Name) as Count_name, count(distinct Name) as batch_count
 from table1
 group by Name) b
 on tab.Name=b.Name

如评论中所述,batch_count列始终为1-您确定这是您想要的吗?

您使用的是什么DBMS?DBMS为MSSQL 2012。输出分组。如何将分组结果插入到其他列中?你们对此有什么逻辑吗?不确定你们到底想达到什么目的,但我觉得你们可能想看看MERGE语句。这就是我想知道的。我使用的逻辑是:*Name*值是唯一的,它应该取决于Name\u val值的计数。