使用coalesce创建视图

时间:2014-08-20 21:49:04

标签: sql sql-server-2005 coalesce

我正在使用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

我在视图中做错了什么

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;