Сравнить значения из 2 таблиц на основе дат из одной из двух таблиц?

49
3

У меня есть 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 в таблице Aggregation сопоставляется с AggregationDate в таблице ProfileReconciliation. В таблице ProfileReconciliation содержатся только данные из ежедневного фида, поэтому нам нужно сравнить только даты, которые находятся в разделе "Реальное согласование" с таблицей "Агрегация". Мне нужно указать погоду, значения каждой таблицы равны, и если нет, мне нужно показать флаг, указывающий на это. Я начал с выбора данных из таблицы агрегирования, где dataDate был в AggregationDate. Я, очевидно, должен бросить AggregationDate. Я просто понятия не имею, куда идти дальше или какой лучший подход к этому.

Примеры данных: из таблицы профилировки

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

спросил(а) 2012-10-09T23:25:00+04:00 7 лет, 4 месяца назад
1
Решение
52

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

Если я правильно понял, что я не уверен, что у меня есть...

Не уверен, что Convert необходим, из вашего примера выглядит так, что у вашего DateTime все равно есть данные.

ответил(а) 2012-10-10T00:01:00+04:00 7 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема