Отправить письмо с триггером, когда я получил письмо, значения были неправильными

Из того, что я могу сказать, вы пытаетесь достичь того же, что и вычисление SUMIFS () в таблице excel, но в силовом запросе?

Это можно сделать несколькими способами, но самая простая - с функцией запроса «Групповая». С помощью этого метода вы используете Table.Group () для группировки данных по вашим двум столбцам (Date & amp; Account Number) и получения суммы для всех записей. Затем все, что вам нужно сделать, - это объединить это значение в исходную таблицу, указав поэтапно. Это эквивалентно использованию сводной таблицы, а затем выполняет VLOOKUP как в столбце «Дата и номер счета».

Вот код M:

let
// You're previous code here (replace the "Source" & #"Changed Type" lines)
    Source = Excel.CurrentWorkbook(){[Name="my_data"]}[Content],
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Account number", type text}, {"Market Value", type number}}),

// Group by Date & Account Number to sum each record
    #"Calculate Record Value" = Table.Group(#"Changed Type", {"Date", "Account number"}, {{"Value of Record", each List.Sum([Market Value]), type number}}),        // Replace #"Changed Type" in this line with the last step reference from your code
// Merge the group by value back to each record in the orginal table
    #"Merged Record Value" = Table.NestedJoin(#"Changed Type",{"Date", "Account number"},#"Calculate Record Value",{"Date", "Account number"},"sum",JoinKind.LeftOuter),
// Expand your new column
    #"Expanded Record Value" = Table.ExpandTableColumn(#"Merged Record Value", "sum", {"Value of Record"}, {"Value of Record"})
in
    #"Expanded Record Value"

Надеюсь, это полезно! Пожалуйста, дайте мне знать, если я неправильно понял ваш вопрос или если это решение не сработает для вас.

С наилучшими пожеланиями DougC

0
задан marc_s 19 January 2019 в 06:45
поделиться

2 ответа

Вы получили неправильные значения, потому что ваш запрос нацелен на основную таблицу без какой-либо фильтрации, поэтому вы получите случайные значения из таблицы.

Вместо этого следует использовать таблицу inserted, в которой будут храниться последние вставленные значения.

, поэтому ваш запрос должен выглядеть следующим образом:

   SELECT TOP 1 @DataEntrega = DataEntrega, @IdEncomenda=b.IdEncomenda
   FROM inserted AS a 
   INNER JOIN  [dbo].[Encomenda] AS b ON a.[IdEncomenda]= b.[IdEncomenda] 
   INNER JOIN [dbo].[Visita] AS c ON b.[IdVisita] = c.[IdVisita]

Не уверен, что INNER JOINs здесь полезны, но если IdEncomenda уже определен в таблице Entrega, тогда я думаю, будет лучше от этих объединений.

Помните, что ваш метод получит только одну строку, поэтому, если вы вставите несколько строк, вы не получите все их по электронной почте. Поэтому вам нужно использовать другие методы, такие как XML, COALESCE или STUFF, чтобы конкретизировать результаты в @BigBody.

0
ответ дан iSR5 19 January 2019 в 06:45
поделиться

Это слишком долго для комментария.

Я бы настоятельно не рекомендовал вам отправлять электронную почту через триггер. Тот факт, что вы даже не знаете, как использовать inserted, говорит о том, что вы недостаточно знакомы с тем, как работает SQL. Вы будете блокировать таблицу (или ее часть), пока предпринимается попытка отправки электронного письма.

Что ты можешь сделать? Самое простое - написать хранимую процедуру для отправки электронной почты и одновременно выполнить вставку. Это дает вам больше контроля над ошибками электронной почты.

Более «профессиональное» решение, вероятно, будет включать очереди сообщений. Вы сделаете вставку, а затем вставите сообщение в очередь. На другом конце слушатель будет отправлять электронную почту и обрабатывать любые проблемы с ошибками электронной почты.

0
ответ дан Gordon Linoff 19 January 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: