Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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-根据列中的值之和获取一对行_Sql_Sum_Max - Fatal编程技术网

SQL-根据列中的值之和获取一对行

SQL-根据列中的值之和获取一对行,sql,sum,max,Sql,Sum,Max,我的桌子看起来像这样: +------+------+-------+------+ | ColA | ColB | ColC | ColD | +------+------+-------+------+ | 1 | 1 | 10217 | 5 | +------+------+-------+------+ | 1 | 2 | 10217 | 6 | +------+------+-------+------+ | 1 | 1 | 10417

我的桌子看起来像这样:

+------+------+-------+------+
| ColA | ColB | ColC  | ColD |
+------+------+-------+------+
| 1    | 1    | 10217 | 5    |
+------+------+-------+------+
| 1    | 2    | 10217 | 6    |
+------+------+-------+------+
| 1    | 1    | 10417 | 7    |
+------+------+-------+------+
| 1    | 2    | 10417 | 8    |
+------+------+-------+------+
| 2    | 1    | 10417 | 9    |
+------+------+-------+------+
| 2    | 2    | 10417 | 10   |
+------+------+-------+------+
如何编写一个查询,返回一对具有以下要求的行:

输入ColA值和ColC范围作为参数后

e、 可乐:1可乐:10217至10417

该表应如下所示:

+------+------+-------+------+
| ColA | ColB | ColC  | ColD |
+------+------+-------+------+
| 1    | 1    | 10217 | 5    |
+------+------+-------+------+
| 1    | 2    | 10217 | 6    |
+------+------+-------+------+
| 1    | 1    | 10417 | 7    |
+------+------+-------+------+
| 1    | 2    | 10417 | 8    |
+------+------+-------+------+
+------+------+-------+------+
| ColA | ColB | ColC  | ColD |
+------+------+-------+------+
| 1    | 1    | 10417 | 7    |
+------+------+-------+------+
| 1    | 2    | 10417 | 8    |
+------+------+-------+------+
现在为特定ColC值的每个ColB对添加ColD值。使用我的示例,对于ColC值10217,它将是5+6,ColC值10417将是7+8。 然后得到两个和之间的最大值。所以它将是15>11。 最后,返回获得上面的最大值(15)所产生的行对。 最终结果应如下所示:

+------+------+-------+------+
| ColA | ColB | ColC  | ColD |
+------+------+-------+------+
| 1    | 1    | 10217 | 5    |
+------+------+-------+------+
| 1    | 2    | 10217 | 6    |
+------+------+-------+------+
| 1    | 1    | 10417 | 7    |
+------+------+-------+------+
| 1    | 2    | 10417 | 8    |
+------+------+-------+------+
+------+------+-------+------+
| ColA | ColB | ColC  | ColD |
+------+------+-------+------+
| 1    | 1    | 10417 | 7    |
+------+------+-------+------+
| 1    | 2    | 10417 | 8    |
+------+------+-------+------+
我只得到了最大值的部分。我在尝试获得行配对时遇到了困难

SELECT Max(sumD) AS maxSumD
FROM (SELECT t1.ColA, t1.ColB, sum(ColD) AS sumD 
        FROM (SELECT * 
                FROM Table1 
                WHERE (ColA = paramA) and (ColC between paramFromC and paramToC))  AS t1 
        GROUP BY t1.ColA, t1.ColB)  
解决方案:使用Ctznkane的答案,我发现了这个骇人的解决方案:

SELECT TOP 2 SUMMEDVALUE, ColA, ColB, ColC, ColD
FROM (SELECT A.ColA, A.ColB, A.ColC, A.ColD, (A.ColD+B.ColD) as SUMMEDVALUE
      FROM Table1 A
      INNER JOIN Table1 B 
      ON A.ColA=B.ColA AND A.ColC=B.ColC AND t1.ColB<>t2.ColB) 
ORDER BY SUMMEDVALUE DESC

如果您正在寻找一对行,那么您应该将表本身连接起来

SELECT (A.COLD+B.COLD) SUMMEDVALUE, A.COLC, A.COLB, B.COLB, A.COLD, B.COLD
FROM TABLE1 A
    INNER JOIN TABLE1 B ON A.COLA=B.COLA AND A.COLC=B.COLC AND A.COLB<>B.COLB

谢谢我更新了我的帖子,加入了我用你的答案找到的解决方案。