Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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 server 2008 如何检索char列的最大发生率值_Sql Server 2008 - Fatal编程技术网

Sql server 2008 如何检索char列的最大发生率值

Sql server 2008 如何检索char列的最大发生率值,sql-server-2008,Sql Server 2008,我在获取列的最大发生率时遇到问题 matnum uom amount ------------------------------------- 1234 EA 10 1234 CS 10 1234 EA 20 1235 CS 10 1235 CS 20 我的输出选择应该是 matnum uom SUM(amount) ------------------------------------- 1234 EA (beca

我在获取列的最大发生率时遇到问题

 matnum   uom  amount
-------------------------------------
1234    EA   10
1234    CS   10
1234    EA    20
1235    CS   10
1235    CS    20
我的输出选择应该是

 matnum   uom  SUM(amount)
-------------------------------------
1234   EA (because EA occured Twice)    40
1235   CS                               30

请提供一个select查询以获得所需的结果

我在这里假设了一些关于您想要的东西,但是:

select matnum, 
       uom, 
       SUM(amount) as sum_amount
from your_table
group by matnum, uom
SELECT A.matnum, B.uom, C.s AS [SUM(amount)]
FROM yourtable A
INNER JOIN (
    SELECT matnum, uom, 
        ROW_NUMBER() OVER (PARTITION BY matnum ORDER BY COUNT(*) DESC) AS rnm
    FROM yourtable
    GROUP BY matnum, uom
) B ON A.matnum = B.matnum AND B.rnm = 1
INNER JOIN (
    SELECT matnum, SUM(amount) AS s 
    FROM yourtable 
    GROUP BY matnum
) C ON A.matnum = C.matnum
GROUP BY A.matnum, B.uom, C.s

1234的正确值是多少,应该是40还是30?如果EA发生了两次,那么总数似乎是30,但你表明你想要40?你的标题说的是最大值,但所需的输出可能是总和-你指的是最大值还是总和?正如@Bluefeet所说,它们不是循环总数,我猜uom和SUMamount没有关系。SUMamount似乎是matnum中所有行的总和,uom似乎是最常见的值。当然不清楚。
SELECT A.matnum, B.uom, C.s AS [SUM(amount)]
FROM yourtable A
INNER JOIN (
    SELECT matnum, uom, 
        ROW_NUMBER() OVER (PARTITION BY matnum ORDER BY COUNT(*) DESC) AS rnm
    FROM yourtable
    GROUP BY matnum, uom
) B ON A.matnum = B.matnum AND B.rnm = 1
INNER JOIN (
    SELECT matnum, SUM(amount) AS s 
    FROM yourtable 
    GROUP BY matnum
) C ON A.matnum = C.matnum
GROUP BY A.matnum, B.uom, C.s