我正在使用3个表中的以下脚本创建一个视图。在MUES_OUT_2010_07和MUES_DME_2010_07中找到HCPCS而在MUES_PHY_2010_07中找不到HCPCS时出现问题
CREATE VIEW MUES AS
SELECT COALESCE(TPHY.HCPCS, TOUT.HCPCS, TDME.HCPCS) AS HCPCS
, COALESCE(UNITS_PHY, -1) AS UNITS_PHY
, COALESCE(UNITS_OUT, -1) AS UNITS_OUT
, COALESCE(UNITS_DME, -1) AS UNITS_DME
FROM MUES_PHY_2010_07 TPHY
FULL OUTER JOIN MUES_OUT_2010_07 TOUT
ON TPHY.HCPCS = TOUT.HCPCS
FULL OUTER JOIN MUES_DME_2010_07 TDME
ON TPHY.HCPCS = TDME.HCPCS
GO
我的表格如下所示
CREATE TABLE [dbo].[MUES_OUT_2010_07](
[HCPCS] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[UNITS_OUT] [smallint] NULL,
CONSTRAINT [PK_MUES_OUT_2010_07] PRIMARY KEY CLUSTERED
(
[HCPCS] ASC
)WITH FILLFACTOR = 90 ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[MUES_DME_2010_07](
[HCPCS] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[UNITS_DME] [smallint] NULL,
CONSTRAINT [PK_MUES_DME_2010_07] PRIMARY KEY CLUSTERED
(
[HCPCS] ASC
)WITH FILLFACTOR = 90 ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[MUES_PHY_2010_07](
[HCPCS] [char](5) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[UNITS_PHY] [smallint] NULL,
CONSTRAINT [PK_MUES_DME_2010_07] PRIMARY KEY CLUSTERED
(
[HCPCS] ASC
)WITH FILLFACTOR = 90 ON [PRIMARY]
) ON [PRIMARY]
GO
insert into MUES_OUT_2010_07 select 'E1036', 1
insert into MUES_DME_2010_07 select 'E1036', 1
我希望视图创建一条如下所示的记录,因为HCPCS'E1036'不在MUES_PHY_2010_07表中
HCPCS UNITS_PHY UNITS_OUT UNITS_DME
E1036 -1 1 1
但它创建了两个记录,如下面的
E1036 -1 -1 1
E1036 -1 1 -1
我在视图中做错了什么
答案 0 :(得分:2)
您正在使用full outer join
。这意味着您必须小心,因为任何表中可能缺少某个值。特别是,当你到达第三个表时,on
条件需要引用两个前面的表,以防缺少一个或另一个表。
所以,这可能会解决您的问题:
CREATE VIEW MUES AS
SELECT COALESCE(TPHY.HCPCS, TOUT.HCPCS, TDME.HCPCS) AS HCPCS,
COALESCE(UNITS_PHY, -1) AS UNITS_PHY,
COALESCE(UNITS_OUT, -1) AS UNITS_OUT,
COALESCE(UNITS_DME, -1) AS UNITS_DME
FROM MUES_PHY_2010_07 TPHY FULL OUTER JOIN
MUES_OUT_2010_07 TOUT
ON TPHY.HCPCS = TOUT.HCPCS FULL OUTER JOIN
MUES_DME_2010_07 TDME
ON COALESCE(TPHY.HCPCS, TOUT.HCPCS) = TDME.HCPCS;