完成我的最终数据的最佳联接是什么?

时间:2013-06-25 20:20:38

标签: sql sql-server-2008 sql-server-2008-r2

我有一个看起来像这样的表:

CREATE TABLE #C
(grpType varchar(10),
CPTCode varchar(10) NULL,
Month int NULL,
MTD money NULL,
MonthCount int NULL,
YTD money NULL,
YearCount int NULL,
Code varchar(10) NULL)

包含以下数据:

grpType CPTCode Month   MTD MonthCount  YTD YearCount   Code
Month   76800   5   1321.61  27       6574.54   82        76800
Month   76856   5   246.01   3        380.64    6         76856
Month   76881   5   9778.95  131          50682.59  509       76881
Month   76942   5   22467.33 190         116663.58  674       76942

然后我有这张桌子:

CREATE TABLE #Prod
(grpType varchar(10),
TotalCharges money NULL,
TotalUnits float NULL,
RVU float NULL,
Code varchar(10) NULL,
CPTCode varchar(10) NULL)

有了这些数据:

grpType TotalCharges    TotalUnits  RVU Code    CPTCode
Month   6100.00           12             0  76800   76800
Month   -475.00           -1             0  76880   76880
Month   38749.00      81             0  76881   76881
Month   54733.00      114            0  76942   76942

我需要的是我的最终数据如下:

CPTCode     MTD     TotalCharges     TotalUnits
76800       1321.61  6100.00           12
76856       246.01    NULL             NULL
76880       NULL     -475.00           -1
76881       9778.95  38749.00          81
76942       22467.33 54733.00          114

实现这一目标的最佳方式是什么?我已经尝试了左连接但它不起作用我得到了这个结果:

CPTCode MTD TotalCharges    TotalUnits
76800   1321.61   6100.00   12
76881   9778.95   38749.00  81
76942   22467.33  54733.00  114

这排除了一些我不想要的数据。有没有人的建议?

谢谢

以下是不起作用的查询:

 SELECT
#C.CPTCode,
#C.MTD,
#Prod.TotalCharges,
#Prod.TotalUnits
FROM  
#C
LEFT JOIN #Prod ON #C.grpType = #Prod.grpType AND #C.Code = #Prod.Code
WHERE
   (#C.CPTCode = '76800' OR #C.CPTCode = '76856' OR #C.CPTCode = '76880' OR #C.CPTCode = '76881' OR #C.CPTCode = '76942' OR #C.CPTCode = '93922')

2 个答案:

答案 0 :(得分:1)

您可以在任一表格中输入“可选”条目。如果是这种情况,您将需要使用完整的外部联接。左连接仅用于保证#Prod表中的条目,但#Prod中不存在76856,因此被排除。右连接也不起作用,因为#C中不存在76880并且将被排除。

答案 1 :(得分:0)

我在Chad Cook和互联网上的其他朋友的帮助下解决了这个问题。这是我们提出的最终连接,输出是完美的。

SELECT
  ISNULL(c.CPTCode, p.CPTCode) as CPTCode,
  c.MTD,
  p.TotalCharges,
  p.TotalUnits
FROM
 #C c 
  FULL OUTER JOIN #Prod p
     ON c.grpType = p.grpType AND c.CPTCode = p.CPTCode