sql-server - 在 where 子句中无法访问按变量分区
问题描述
SELECT DISTINCT
cs.file_id,
null,
'lol',
t.encounter_id,
e.pan, e.mr,
e.provider_id,
t.c_date_of_service,
GETDATE(),
ROW_NUMBER() OVER (PARTITION BY e.encounter_id ORDER BY e.encounter_id DESC) row
FROM
encounters e WITH (NOLOCK)
JOIN
dummy ec ON ec.encounter_id = e.encounter_id
JOIN
case_status cs ON cs.case_id = ec.case_id
JOIN
(SELECT DISTINCT
e.encounter_id, c.date_of_service AS c_date_of_service
FROM
encounters e WITH (NOLOCK)
JOIN
dummy ec ON ec.encounter_id = e.encounter_id
JOIN
cases c ON ec.case_id = c.case_id
GROUP BY
e.pid, c.date_of_service, e.encounter_id
HAVING
(COUNT(0) > 1 AND e.pid IS NOT NULL)) AS t ON t.encounter_id = e.encounter_id
WHERE
row = 1
我收到一个错误
列名“行”无效
如果我只是删除where row = 1
它在 SQL Server 中工作正常。
还有一件事 -ROW_NUMBER() OVER (PARTITION BY e.encounter_id ORDER BY e.encounter_id DESC)
显示不同的行号,在结果数据RANK() OVER (PARTITION BY e.encounter_id ORDER BY e.encounter_id DESC)
中有重复的地方显示所有排名为 1 。encounter_id
解决方案
您不能直接在 where 子句中使用计算列,您需要将其包装在内联查询中,然后在其上添加 where 子句。
select * from (SELECT DISTINCT
cs.file_id,
null,
'lol',
t.encounter_id,
e.pan, e.mr,
e.provider_id,
t.c_date_of_service,
GETDATE(),
ROW_NUMBER() OVER (PARTITION BY e.encounter_id ORDER BY e.encounter_id DESC) row
FROM
encounters e WITH (NOLOCK)
JOIN
dummy ec ON ec.encounter_id = e.encounter_id
JOIN
case_status cs ON cs.case_id = ec.case_id
JOIN
(SELECT DISTINCT
e.encounter_id, c.date_of_service AS c_date_of_service
FROM
encounters e WITH (NOLOCK)
JOIN
dummy ec ON ec.encounter_id = e.encounter_id
JOIN
cases c ON ec.case_id = c.case_id
GROUP BY
e.pid, c.date_of_service, e.encounter_id
HAVING
(COUNT(0) > 1 AND e.pid IS NOT NULL)) AS t ON t.encounter_id =
e.encounter_id
) as A WHERE A.row = 1
推荐阅读
- angular6 - 由于安全策略指令,ReCAPTCHA2 脚本加载错误
- modem - 使用 `nmcli` 查询 SIM PIN 状态
- android - 土耳其语字符未在 WebView android 中显示
- scikit-learn - TensorFlow2.0 Model.fit auc 不等于model.predict得到的auc,然后在同一个开发集中用sklearn roc_auc_score计算
- rest - 在执行 DELETE 请求时输入密码
- python - 在 Django Admin 或 Form 中清除预期的 ExclusionConstraint IntegrityError
- c# - 在 for 循环中将 string[] 与 string[] 进行比较
- types - 什么是 TAPL 的 OCaml 实现中的模块、异常、FI 和 UNKNOWN?
- visual-studio - 如何在 CTRL+F5 中启动项目
- perl - Perl:组合两个哈希数组的值并使第二个数组的值成为输出哈希的键