繁体   English   中英

如何匹配sql中的值?

[英]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 ......等

注意 :此解决方案适用于任何不同于零的数字(因子规则)

解决方案的步骤

  1. 对每一行进行乘法和求和
  2. 根据乘法和求和进行分区并命名[part]
  3. 获取仅出现一次的记录=> [part] = 1
  4. 统计记录

这里的解决方案

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM