我有一个场景,可以有多个类型(type1:xxxxxx,yyyyyy和type 2:aaaaa,bbbbb)关联相同的num(提供条件相同的用户名
我的意思是同一个用户名可以有多种类型,具有相同的num和p_id 现在我必须将pk 1和pk 2(图1)的值1,2,3,4,5组合在一起,因为它们对于两个主键都有类似的类型(类型1 xxxxx和类型2:aaaaa)
这些值必须与max(pk)组合,即如图1所示pk = 2
然后结果集应该如图2所示。 在组合这些值之后,我必须从表名中删除pk 1:值,应该只有max(pk)(pk = 2),因为我合并了值。
有人可以帮我解决这个问题。我非常感谢你的帮助
Pk num P_id year Value value value value value type type username
1 2 3 4 5 1 2
1 123456 4567 2012 $2 $5 0 0 0 xxxxx aaaaa mr.nice
2 123456 4567 2012 $1 $5 $2 0 0 xxxxx aaaaa mr.nice
3 123456 4567 2012 0 $2 0 0 0 yyyyy bbbbb mr.nice
Fig 1: Table name: values
Pk num P_id year Value value value value value type type username
1 2 3 4 5 1 2
2 123456 4567 2012 $3 $10 $2 0 0 xxxxx aaaaa mr.nice
3 123456 4567 2012 $0 2 0 0 0 yyyyy bbbbb mr.nice
图2:表名:值 结合值
后的结果集答案 0 :(得分:0)
使用GROUP BY子句组合值。使用此子句时,需要使用聚合函数(如MAX,SUM等)。以下是您将用于解决问题的示例:
SELECT MAX(Pk),
num,
P_id,
year,
SUM(Value1),
SUM(value2),
SUM(value3),
SUM(value4),
SUM(value5),
type1,
type2,
username
FROM YourTable
GROUP BY
num,
P_id,
year,
type1,
type2,
username
答案 1 :(得分:0)
我没有使用你所有的领域,但你明白这个例子:
@ Fig1是一个大致类似于你想做的临时表,我们会将重要的值插入其中。
declare @fig1 table ( PK int, val1 money, val2 money, vtype varchar(5), vtype2 varchar(5) )
declare @uPK table ( PK int)
insert into @fig1 values
(1, 2, 5, 'xxxxx', 'aaaaa'),
(2, 1, 5, 'xxxxx', 'aaaaa'),
(3, 0, 2, 'yyyyy', 'bbbbb');
这是魔术开始的地方,我们使用公用表表达式来计算字段的新值应该是什么,在快速表上命名为new:Updates
WITH Updates
AS (
select
max(PK) as PK,
sum(val1) as Val1,
sum(val2) as Val2
from @fig1
group by vtype, vtype2)
接下来,我们根据这个新聚合表更新值,并使用我们的OUTPUT关键字告诉我们哪些值已更新,将这些值推送到临时变量@uPK。
Update f
set val1=U.Val1, val2=U.val2
OUTPUT INSERTED.PK into @uPK
from Updates U
inner join @fig1 f on U.pk=f.pk;
一旦我们知道应该留下哪些,我们只需删除那些不应该存在的那些。此外,通过此删除,您可能只想删除与已更新的类型相匹配的那些,但基本的T-SQL会让您走这条路。
delete f
from @fig1 f
left outer join @uPK p on f.PK=p.PK
where p.PK is null
select * from @fig1