Sql 在where子句中使用子查询
我需要从这些报告中得到的结果只显示状态为I的患者。我真的不知道如何做,因为这些报告的子查询量很大,而且有很多患者是相关的。我不确定我是否可以在where语句中放置一个子查询来覆盖整个内容。提前感谢您的帮助。SQL Server 2005Sql 在where子句中使用子查询,sql,sql-server,sql-server-2005,subquery,where,Sql,Sql Server,Sql Server 2005,Subquery,Where,我需要从这些报告中得到的结果只显示状态为I的患者。我真的不知道如何做,因为这些报告的子查询量很大,而且有很多患者是相关的。我不确定我是否可以在where语句中放置一个子查询来覆盖整个内容。提前感谢您的帮助。SQL Server 2005 SELECT patient_id, ( SELECT p.case_status FROM patient p WHERE p.patient_id = btb.patient_id
SELECT patient_id,
(
SELECT p.case_status
FROM patient p
WHERE p.patient_id = btb.patient_id
AND p.episode_id = (
SELECT MAX(episode_id)
FROM patient p2
WHERE p2.patient_id = p.patient_id
)
) AS 'Status',
(
SELECT p.lname + ', ' + p.fname
FROM patient p
WHERE p.patient_id = btb.patient_id
AND p.episode_id = (
SELECT MAX(episode_id)
FROM patient p2
WHERE p2.patient_id = p.patient_id
)
) AS 'client',
Coverage_plan_id,
(
SELECT proc_code
FROM billing_transaction bt
WHERE bt.clinical_transaction_no = btb.clinical_transaction_no
AND bt.coverage_plan_id = btb.coverage_plan_id
AND bt.coverage_plan_id = btb.coverage_plan_id
) AS 'Procedure',
proc_chron,
(
SELECT billing_amt
FROM billing_transaction bt
WHERE bt.clinical_transaction_no = btb.clinical_transaction_no
AND bt.coverage_plan_id = btb.coverage_plan_id
) AS 'Billing Amount',
balance_amount,
(
SELECT MAX(accounting_date)
FROM billing_ledger bl
WHERE bl.clinical_transaction_no = btb.clinical_transaction_no
AND subtype = 'pa'
AND bl.coverage_plan_id = 'standard'
) AS 'Last Payment on Trans',
(
SELECT MAX(instrument_date)
FROM payment p
WHERE p.patient_id = btb.patient_id
AND p.coverage_plan_id = 'standard'
) AS 'Last Payment on Acct',
(
SELECT SUM(balance_amount)
FROM billing_transaction_balance btb2
WHERE btb2.patient_id = btb.patient_id
AND btb2.coverage_plan_id = btb.coverage_plan_id
AND proc_chron <= CONVERT(
CHAR(6),
DATEADD(YEAR, -1, DATEDIFF(DAY, 0, GETDATE())),
112
) + '01'
AND btb2.coverage_plan_id IN ('standard')
) AS 'Balance'
FROM billing_transaction_balance btb
WHERE proc_chron <= CONVERT(
CHAR(6),
DATEADD(YEAR, -1, DATEDIFF(DAY, 0, GETDATE())),
112
) + '01'
AND coverage_plan_id IN ('standard')
GROUP BY
patient_id,
proc_chron,
coverage_plan_id,
balance_amount,
clinical_transaction_no
FROM子句只包含一个表billing\U transaction\U balance,该表由每个子查询引用
如果将该表的结果限制为仅包含Status='I'的结果,则会覆盖整个查询。通过对包含Status列的表的内部联接,可以最有效地实现这一点 添加一个HAVING status='I'Msg 207,Level 16,State 1,Line 19无效列名'status'。您应该使用联接而不是相关子查询。您的许多子查询都反复出现在同一个表中。这可以通过一个select语句来完成。在第一个名为“Status”的子查询中,where子句中需要有一个p.case_Status='I'。另外,看看肖恩也提到了什么。这是由其他人编写的,我只需要一个水晶报告的精确变体,所以如果可能的话,我真的不想更改它。p.case_status='i'在哪行?我有点明白你的意思,但是你能在代码中展示一下吗?只是为了排队?谢谢。O并且该表没有状态字段。它仅在患者表中作为案例\状态。从账单\交易\余额btb内部连接患者p,其中p.patient\ id=btb.patient\ id和p.Incident\ U id=从患者p2中选择最大事件\ id,其中p2.patient\ id=p.patient\ id和p.case_status='I'Msg 156,第15级,状态1,第15行关键字“WHERE”附近的语法不正确。Msg 156,级别15,状态1,第16行关键字“AND”附近的语法不正确。哦,对不起,我本想将第一个位置改为ON,但忘记了。尝试以下操作:从账单\事务\余额btb内部连接p上的患者p。患者\ id=btb。患者\ id和p.Incide\ id=从患者p2选择MaxIncide\ id,其中p2.patient\ id=p.patient\ id和p.case\ U status='I'