[英]how to match values in sql ?
我的桌子上有4列..
digit1 digit2 digit3 amount
1 2 3 1
2 2 2 1
2 1 3 1
3 2 1 1
如果行具有相同的数字值,我想将它们分组..输出将如下所示:
digit1 digit2 digit3 amount
1 2 3 3
2 2 2 1
对不起这个noob问题虽然..自从昨晚以来我一直坚持这件事..提前提交
这是一个解决方案
如果所有数字都有相同的数字组(2,1,3),(3,2,1),...等,这意味着他们有相同的阶乘
例如:2 * 1 * 3 = 3 * 2 * 1 ......等
注意 :此解决方案适用于任何不同于零的数字(因子规则)
解决方案的步骤
这里的解决方案
with fact
as(
select Id,digit1,digit2,digit3,digit1*digit2*digit3 as [mult],digit1+digit2+digit3 as [sum]
from Data),part as(
select Id,digit1,digit2,digit3,[mult],[sum],row_number() over(partition by [mult],[sum] order by [mult],[sum]) as [Part]
from fact
)
select Id,digit1,digit2,digit3,(select count(*)
from fact f where f.[mult]=p.[mult] and f.[sum]=p.[sum]) as amount
from part p
where part=1
这里是一个正确的结果DEMO
希望它会对你有所帮助
please try this one i did it in oracle but its simple sql so it will too work on your DBMS
select digit1,digit2,digit3,(select sum(amount) from expdha
where digit2<>digit1+1 and digit3<>digit2+1) amount
from expdha
where digit2=digit1+1 and digit3=digit2+1
group by digit1,digit2,digit3
union
select digit1,digit2,digit3,amount from expdha
where digit1=digit2 and digit2=digit3;
其中expdha是你的表,如果你需要解释,那么我可以解释它。
使用Case Statement
按顺序获取列,然后使用Group by
Clause获得结果。 试试这个。
SELECT col1,col2,col3,Sum(amount) As Sum_Amount
FROM (SELECT CASE WHEN digit1 > digit2 AND digit1 > digit3 THEN digit1
WHEN digit2 > digit1 AND digit2 > digit3 THEN digit2
ELSE digit3
END col1,
CASE WHEN ( digit1 > digit2 OR digit1 > digit3 ) AND ( digit1 < digit3 OR digit1 < digit2 ) THEN digit1
WHEN ( digit2 > digit1 OR digit2 > digit3 ) AND ( digit2 < digit3 OR digit2 < digit1 ) THEN digit2
ELSE digit3
END col2,
CASE
WHEN digit1 < digit2 AND digit1 < digit3 THEN digit1
WHEN digit2 < digit1 AND digit2 < digit3 THEN digit2
ELSE digit3
END col3,
*
FROM #test) a
GROUP BY col1,col2,col3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.