sql - 如何从 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 等
解决方案
您可以运行多个 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
推荐阅读
- android - Facebook Android sdk 错误 - 使用反斜杠生成 postRequest 'extinfo' json 数组
- c# - 如何通过碰撞将物体围绕球体旋转 360 度?
- c# - 在 c# 中使用 Sophos Labs Intelix 扫描上传的文件
- r - 从 chrome 下载数据的代码问题
- swift - ARFaceAnchor 如何确定顶点索引?
- arduino - Arduino IDE 关键字.txt 不突出显示类名 KEYWORD1
- python-3.x - Python:想要像 adobe Photoshop 一样编辑图像
- qt - 使用 Qt 从 QVariantList 中获取项目
- npm - 我在构建应用程序后使用 npm start 在 vscode 中自动构建打开文件时遇到问题
- ssis - 仅在一列 SSIS 中使用数据转换时出错