我在将值返回到列清单百分比时遇到问题。它给出错误“子查询返回的值大于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))
答案 0 :(得分:2)
我认为您正在寻找如下更新脚本-
注意:请先尝试使用测试数据。
UPDATE T
SET T.VALUE_INTEGER = A.Val
FROM D_ENERGY_REFERENCE T
INNER JOIN
(
SELECT
ID,
CASE
WHEN CAST(COUNT(CASE WHEN D_CHECK_LIST.EVALUATION NOT IN (0,1) THEN EVALUATION ELSE NULL END) AS FLOAT) = 0 THEN 0
ELSE
(
CAST(COUNT(CASE WHEN D_CHECK_LIST.EVALUATION = 50001 THEN EVALUATION ELSE NULL END) AS FLOAT)
/
CAST(COUNT(CASE WHEN D_CHECK_LIST.EVALUATION NOT IN (0,1) THEN EVALUATION ELSE NULL END) AS FLOAT)
) * 100
END AS Val
FROM D_CHECK_LIST
GROUP BY ID
)A ON T.ID = A.ID