Convertendo funções longas do Excel em SQL?
Pergunta
IFERROR((SUMIFS('Sheet 1'!$K:$K,'Sheet 1'!$A:$A,'Sheet 2'!I$5,'Sheet 1'!$C:$C,'Sheet 2'!$B15,'Sheet 1'!$K:$K,"<>0"))/(SUMIFS('Sheet 1'!$J:$J,'Sheet 1'!$A:$A,'Sheet 2'!I$5,'Sheet 1'!$C:$C,'Sheet 2'!$B15,'Sheet 1'!$K:$K,"<>0")),"")
Estou trabalhando com a seguinte função no Excel e preciso interpretá-la no MS SQL.Estou familiarizado com SQL, mas não estou familiarizado com Excel.Pelo que entendi a função está retornando "" se houver erro.caso contrário, ele está chamando SUMIF nos parênteses mais internos - dentro dos quais não tenho certeza do que está acontecendo, mesmo depois de procurar o que!,: e $ fazem no Excel
Solução
SUMIFS()
adiciona um intervalo de células com base em um ou mais critérios aplicados a um intervalo de células.
Primeiro é o intervalo de valores a serem somados, depois vêm os pares de critérios, primeiro é o intervalo de critérios e depois os critérios.O primeiro divide algo assim:
SUMIFS('Sheet 1'!$K:$K -- Sum this field
,'Sheet 1'!$A:$A,'Sheet 2'!I$5 --When same row in A matches Sheet 2 I5
,'Sheet 1'!$C:$C,'Sheet 2'!$B15 --When same row in C matches Sheet 2 B, but 15 rows down.
,'Sheet 1'!$K:$K,"<>0") --When the values aren't 0
Esse é o numerador da sua fórmula, você pode dividir o segundo SUMIF() de forma semelhante.
Outras dicas
Ok, já que não tenho ideia do que é sua planilha, não posso ajudar com o SQL, mas vou tentar detalhar a função para você
#this part is for if the enclosed returns an error like #VALUE
#you can think of this as a try rescue block of sorts
#so if there is an Error then Return ""
IFERROR(
(
#This part is Summing All the values in Column K for multiple criteria
#Sum all the values in Column K ref ['Sheet 1'!$K:$K]
#Where all the values in Column A = Value in Cell I5 ref['Sheet 1'!$A:$A,'Sheet 2'!I$5]
#And Values in Column C = Value in Cell B15 ref [ 'Sheet 1'!$C:$C,'Sheet 2'!$B15]
#And the Values in Column K Do not = 0 ref ['Sheet 1'!$K:$K,"<>0"]
SUMIFS('Sheet 1'!$K:$K,'Sheet 1'!$A:$A,'Sheet 2'!I$5,'Sheet 1'!$C:$C,'Sheet 2'!$B15,'Sheet 1'!$K:$K,"<>0")
#Above Number Divided By
)/(
#This part is Summing All the values in Column J for multiple criteria
#Sum all the values in Column J ref ['Sheet 1'!$J:$J]
#Where all the values in Column A = Value in Cell I5 ref['Sheet 1'!$A:$A,'Sheet 2'!I$5]
#And Values in Column C = Value in Cell B15 ref [ 'Sheet 1'!$C:$C,'Sheet 2'!$B15]
#And the Values in Column K Do not = 0 ref ['Sheet 1'!$K:$K,"<>0"]
SUMIFS('Sheet 1'!$J:$J,'Sheet 1'!$A:$A,'Sheet 2'!I$5,'Sheet 1'!$C:$C,'Sheet 2'!$B15,'Sheet 1'!$K:$K,"<>0")
)
,"")
Aqui está a definição de SOMAS.Sinopse rápida:
*First Argument is the Rows being Summed
*Second Argument is the Criteria Being Evaulated
*Third Argument is the Expression Being Evaluated Against
*Repeat Second and Third for all additional Criterium
SQL hackeado
SELECT Sum(Sheet1.ColumnK) / Sum(Sheet2.ColumnJ)
FROM Sheet1 JOIN Sheet2
WHERE
Sheet1.ColumnA = 10 --I Used 10 in place of Sheet2.ColumnI Row5 as this does not translate directly in SQL
AND Sheet1.ColumnC = 20 -- Same As Above Substitution for Sheet2.ColumnB Row 15
AND Sheet1.ColumnK <> 0
Espero que isto ajude