【发布时间】:2019-10-13 03:46:46
【问题描述】:
我在将值返回到列清单百分比时遇到问题。它给出了错误“子查询返回了超过 1 个值。当子查询遵循 =,!= 时,这是不允许的,”提供的表只是来自具有许多评估的数千行的样本。
表格是 2,我从数千行中提取了这个样本:
╔═════════╦═══════════════╗
║ id ║ value_integer ║
╠═════════╬═══════════════╣
║ 2059064 ║ NULL ║
╠═════════╬═══════════════╣
║ 2064435 ║ NULL ║
╠═════════╬═══════════════╣
║ 2064889 ║ NULL ║
╠═════════╬═══════════════╣
║ 2064893 ║ NULL ║
╠═════════╬═══════════════╣
║ 2086272 ║ NULL ║
╠═════════╬═══════════════╣
║ 2128447 ║ NULL ║
╠═════════╬═══════════════╣
║ 2128447 ║ NULL ║
╠═════════╬═══════════════╣
║ 2128447 ║ NULL ║
╠═════════╬═══════════════╣
║ 2134036 ║ NULL ║
╠═════════╬═══════════════╣
║ 2163046 ║ NULL ║
╠═════════╬═══════════════╣
║ 2175279 ║ NULL ║
╠═════════╬═══════════════╣
║ 2175279 ║ NULL ║
╠═════════╬═══════════════╣
║ 2186928 ║ NULL ║
╠═════════╬═══════════════╣
第二张桌子是:
╔═════════╦════════════╗
║ id ║ evaluation ║
╠═════════╬════════════╣
║ 2059064 ║ 0 ║
╠═════════╬════════════╣
║ 2064435 ║ 0 ║
╠═════════╬════════════╣
║ 2064889 ║ 0 ║
╠═════════╬════════════╣
║ 2064893 ║ 0 ║
╠═════════╬════════════╣
║ 2086272 ║ 50001 ║
╠═════════╬════════════╣
║ 2128447 ║ 0 ║
╠═════════╬════════════╣
║ 2128447 ║ 0 ║
╠═════════╬════════════╣
║ 2128447 ║ 50001 ║
╠═════════╬════════════╣
║ 2134036 ║ 50001 ║
╠═════════╬════════════╣
║ 2163046 ║ 50001 ║
╠═════════╬════════════╣
║ 2175279 ║ 50006 ║
╠═════════╬════════════╣
║ 2175279 ║ 50001 ║
╠═════════╬════════════╣
║ 2186928 ║ 50004 ║
╠═════════╬════════════╣
║ 2190848 ║ 50001 ║
╠═════════╬════════════╣
║ 2190848 ║ 0 ║
╠═════════╬════════════╣
║ 2190848 ║ 0 ║
╠═════════╬════════════╣
║ 2190848 ║ 1 ║
╠═════════╬════════════╣
║ 2190848 ║ 1 ║
╠═════════╬════════════╣
║ 2222107 ║ 1 ║
╠═════════╬════════════╣
║ 2250093 ║ 1 ║
╠═════════╬════════════╣
║ 2250093 ║ 1 ║
╠═════════╬════════════╣
║ 2250093 ║ 50005 ║
╠═════════╬════════════╣
║ 2250093 ║ 0 ║
╠═════════╬════════════╣
╚═════════╩════════════╝
目的是计算所选评价/总评价的百分比。评价50001为是,0和1分别表示未评价或未选择。
UPDATE DB.D_ENERGY_REFERENCE
SET D_ENERGY_REFERENCE.VALUE_INTEGER = (SELECT (SELECT CAST(COUNT(EVALUATION) AS FLOAT)
FROM DB.D_CHECK_LIST D_CHECK_LIST
WHERE D_CHECK_LIST.EVALUATION = 50001
GROUP BY ID) / (SELECT CAST(COUNT(EVALUATION) AS FLOAT)
FROM DB.D_CHECK_LIST D_CHECK_LIST
WHERE D_CHECK_LIST.EVALUATION NOT IN (0,1)
GROUP BY ID) * 100
FROM DB.D_CHECK_LIST D_CHECK_LIST
WHERE D_CHECK_LIST.ID IN (SELECT ID
FROM DB.D_ENERGY_REFERENCE
WHERE ID = D_CHECK_LIST.ID))
【问题讨论】:
-
您的一个子查询返回了多条记录。尝试单独运行它们,你会发现你的问题
-
我做到了,但被卡住了。它在单独的选择语句中赋予价值
-
你都试过了吗?嵌套的和外部的?
-
如果我们在其中放一些制表符,我们可以看到 yuio 甚至没有关闭所有的括号。但是该子查询肯定会返回多行,因为它为表
D_CHECK_LIST中的每个ID值返回一行,该表也在表D_ENERGY_REFERENCE中。或许您最好在这里展示您的数据和预期结果。 -
越看查询,越不明白它的目的是什么。直到现在我才意识到,但是子查询中的子查询甚至会返回多行,因为
ID上有一个GROUP BY。这些查询都没有使用横向连接来限制返回的结果,所以我实际上不知道这个阶段的 OP 是什么。
标签: sql sql-server