Sql 如何在同一代码中插入列并更新它们
先谢谢你 我有一张表1: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
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 name和batch\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值的计数。