首页 > 解决方案 > 如何从 sum = @Number 的每一行中的一个未知列中选择一个结果

问题描述

我有一个已知数字、x 和几个命名列(ix、col1、col2、col3),需要从每行(不一定是同一列)中的 col1、col2 或 col3 中选择一个值,其中总计加起来到已知数 x。我很难弄清楚这件事的逻辑。

使用列中的数字不可能有多个结果集,但必须从每一行返回一列,所有返回的列加起来就是数字 X。

理想情况下,它会是这样的:

SELECT * as results FROM table WHERE sum(results) = number

但是我不能在 sum 语句中使用 *,并且可能会返回来自每一列的多个结果(尽管位于不同的行中)。所以我不能选择 col1、col2 col3 等

标签: sql

解决方案


您可以运行多个 select 语句并每次指定不同的条件。

SELECT FirstColumn,
       SecondColumn
FROM [Table]
WHERE FirstColumn + SecondColumn = x
UNION
SELECT SecondColumn,
       ThirdColumn
FROM [Table]
WHERE SecondColumn + ThirdColumn = x
UNION
SELECT FirstColumn,
       ThirdColumn
FROM [Table]
WHERE FirstColumn + ThirdColumn = x

或使用CASE...WHEN, 并按条件过滤以忽略空结果。Case返回单个结果,因此您需要重复 case 条件以返回不同的列:

SELECT CASE
           WHEN FirstColumn + SecondColumn = x THEN FirstColumn
           WHEN SecondColumn + ThirdColumn = x THEN SecondColumn
           WHEN FirstColumn + ThirdColumn = x THEN FirstColumn
       END AS FirstMatch,
       CASE
           WHEN FirstColumn + SecondColumn = x THEN SecondColumn
           WHEN SecondColumn + ThirdColumn = x THEN ThirdColumn
           WHEN FirstColumn + ThirdColumn = x THEN ThirdColumn
       END AS SecondMatch
FROM [Table]
WHERE FirstColumn + SecondColumn = x
  OR SecondColumn + ThirdColumn = x
  OR FirstColumn + ThirdColumn = x

推荐阅读