根据2个表中某个表中的日期比较2个表中的值?

时间:2012-10-09 20:25:36

标签: sql sql-server-2008

我有2个表具有相似的数据,我需要将一个表的值与日期相等的另一个表进行比较。

示例表:

CREATE TABLE [data].[ProfileReconciliation] (
[ProfileName] varchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[OriginalFeedDate] datetime NOT NULL ,
[AggregationDate] datetime NOT NULL ,
[TotalDescription] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[TotalSalesAmount] decimal(18,2) NOT NULL ,
[LoadKey] int NULL 
)
ON [DATA]
GO

CREATE TABLE [data].[Aggregation] (
[ColumnName] varchar(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[dataDate] date,
[profileDate] datetime  ,
[aggregationType] varchar(200) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL ,
[dataValue] decimal(18,2) NOT NULL ,

)
ON [DATA]
GO

因此,dataValue表中的Aggregation需要与TotalSalesAmount表中的ProfileReconciliation进行比较。 dataDate表格中的AggregationAggregationDate表格中的ProfileReconciliation匹配。 ProfileReconciliation表仅包含每日Feed中的数据,因此我们只需要将ProfileReconciliation中的日期与Aggregation表进行比较。我需要指出天气,每个表的值是相等的,如果不是,我需要显示一个标志,表明如此。我首先从Aggregation表中选择dataDate在AggregationDate中的数据。我显然必须施放AggregationDate。我不知道接下来要去哪里或者最好的方法是什么。

示例数据:  来自ProfileReconciliation表

OPDCost 2012-10-08 17:43:51.000 2012-10-07 00:00:00.000 SUM(Total_Net_Cost_Amt) 21323923.00 5307

OPDS    2012-10-08 17:43:51.000 2012-10-07 00:00:00.000 SUM(Total_Net_Sales_Amt)    70753228.00 5307

来自聚合表:

SPVData.fact.DayStoreProdCost   2012-10-07  2012-10-09 09:06:20.9167944     20970788.131400 
SPVData.fact.DayStoreProdExtra   2012-10-07     2012-10-09 09:03:19.1558724     70642458.910000 

因为你可以看到金额不匹配所以我们希望结果看起来像这样:

**ProfileName  Date                      ProfileAmount AggregationAmount   Equal**
OPDCost      2012-10-07 00:00:00.000   21323923.00   20970788.13         0
OPDS         2012-10-07 00:00:00.000   70753228.00   70642458.91         0

1 个答案:

答案 0 :(得分:1)

Select p.ProfileName, p.AggregationDate,
p.TotalSalesAmount as ProfileAmount, a.DataValue as AggregationAmount,
Case When p.SalesAmount <> a.DataValue Then 1
else 0
end as Equal
From Aggregation a 
Inner Join ProfileReconcilation p On Convert(Date,p.AggregationDate) = a.DataDate

如果我理解正确,我不确定我有......

不确定转换是否也是必要的,从您的示例看起来您的DateTime无论如何都有数据。