2
I am putting together a structure within a view where I am working with market levels (retail segment). Following this idea I have a product that can contain more than one current registration; it can contain, for example, section A with 10% discount and mark B with 15% and in a product level line an X product with 8% discount%.
I need the Return to be if I select Product X the discount value is 8% (even if within this product contains Section A, and Mark B).
When I select a product of the brand B must return 15% (since it is not registered in the same registration in the "tab" of products and independent if it is registered in the tab of Sections).
When I select a product from Section A, this product cannot be "within" brand B nor within the other ratings.
There are other rules within the View that are quieter are not able to resolve this point above. Recalling that I always need to consider the largest registered Current record among the chosen product, and the lowest parameterized market level.
Prioritization is left to right:
Product / Brand / Classes / Subgroup / Group / Sections
Follow view for those who agree to give a touch:
SELECT A.TABELA_DESCONTO ,
Z.PRODUTO ,
A.TIPO_CALCULO_PRECO_PROMOCAO ,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 1
THEN A.DESCONTO_PADRAO
ELSE 0
END AS DESCONTO_PADRAO ,
A.DATA_HORA_INICIAL,
A.DATA_HORA_FINAL,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 2
THEN A.LUCRO_BRUTO_TABELADO
ELSE 0
END AS LUCRO_BRUTO_TABELADO,
A.APENAS_CLIENTES,
A.APENAS_CONVENIOS
FROM TABELAS_DESCONTOS_SECOES A WITH(NOLOCK)
JOIN MAIOR_TABELA_DESCONTO J WITH(NOLOCK) ON J.TABELA_DESCONTO = A.TABELA_DESCONTO
JOIN PRODUTOS Z WITH(NOLOCK) ON Z.SECAO_PRODUTO = A.SECAO_PRODUTO
LEFT
JOIN TABELAS_DESCONTOS_GRUPOS C (NOLOCK) ON C.GRUPO_PRODUTO = Z.GRUPO_PRODUTO
LEFT
JOIN TABELAS_DESCONTOS_SUBGRUPOS D (NOLOCK) ON D.SUBGRUPO_PRODUTO = Z.SUBGRUPO_PRODUTO
LEFT
JOIN TABELAS_DESCONTOS_CLASSES E (NOLOCK) ON E.CLASSE_PRODUTO = Z.CLASSE_PRODUTO
LEFT
JOIN TABELAS_DESCONTOS_MARCAS F (NOLOCK) ON F.MARCA = Z.MARCA
LEFT
JOIN TABELAS_DESCONTOS_MARKUP G (NOLOCK) ON G.PRODUTO = Z.PRODUTO
WHERE GETDATE() BETWEEN A.DATA_HORA_INICIAL AND A.DATA_HORA_FINAL
AND ( ( DATEPART(DW, GETDATE() ) = 1 AND A.DOMINGO = 'S') OR
( DATEPART(DW, GETDATE() ) = 2 AND A.SEGUNDA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 3 AND A.TERCA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 4 AND A.QUARTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 5 AND A.QUINTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 6 AND A.SEXTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 7 AND A.SABADO = 'S') )
AND C.GRUPO_PRODUTO IS NULL
AND D.SUBGRUPO_PRODUTO IS NULL
AND E.CLASSE_PRODUTO IS NULL
AND F.MARCA IS NULL
AND G.PRODUTO IS NULL
UNION ALL
SELECT A.TABELA_DESCONTO ,
Z.PRODUTO ,
A.TIPO_CALCULO_PRECO_PROMOCAO ,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 1
THEN A.DESCONTO_PADRAO
ELSE 0
END AS DESCONTO_PADRAO ,
A.DATA_HORA_INICIAL,
A.DATA_HORA_FINAL,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 2
THEN A.LUCRO_BRUTO_TABELADO
ELSE 0
END AS LUCRO_BRUTO_TABELADO,
A.APENAS_CLIENTES,
A.APENAS_CONVENIOS
FROM TABELAS_DESCONTOS_GRUPOS A WITH(NOLOCK)
JOIN MAIOR_TABELA_DESCONTO J WITH(NOLOCK) ON J.TABELA_DESCONTO = A.TABELA_DESCONTO
JOIN PRODUTOS Z WITH(NOLOCK) ON Z.GRUPO_PRODUTO = A.GRUPO_PRODUTO
LEFT
JOIN TABELAS_DESCONTOS_SUBGRUPOS D (NOLOCK) ON D.SUBGRUPO_PRODUTO = Z.SUBGRUPO_PRODUTO
LEFT
JOIN TABELAS_DESCONTOS_CLASSES E (NOLOCK) ON E.CLASSE_PRODUTO = Z.CLASSE_PRODUTO
LEFT
JOIN TABELAS_DESCONTOS_MARCAS F (NOLOCK) ON F.MARCA = Z.MARCA
LEFT
JOIN TABELAS_DESCONTOS_MARKUP G (NOLOCK) ON G.PRODUTO = Z.PRODUTO
WHERE GETDATE() BETWEEN A.DATA_HORA_INICIAL AND A.DATA_HORA_FINAL
AND ( ( DATEPART(DW, GETDATE() ) = 1 AND A.DOMINGO = 'S') OR
( DATEPART(DW, GETDATE() ) = 2 AND A.SEGUNDA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 3 AND A.TERCA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 4 AND A.QUARTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 5 AND A.QUINTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 6 AND A.SEXTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 7 AND A.SABADO = 'S') )
AND D.SUBGRUPO_PRODUTO IS NULL
AND E.CLASSE_PRODUTO IS NULL
AND F.MARCA IS NULL
AND G.PRODUTO IS NULL
UNION ALL
SELECT A.TABELA_DESCONTO ,
Z.PRODUTO ,
A.TIPO_CALCULO_PRECO_PROMOCAO ,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 1
THEN A.DESCONTO_PADRAO
ELSE 0
END AS DESCONTO_PADRAO ,
A.DATA_HORA_INICIAL,
A.DATA_HORA_FINAL,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 2
THEN A.LUCRO_BRUTO_TABELADO
ELSE 0
END AS LUCRO_BRUTO_TABELADO,
A.APENAS_CLIENTES,
A.APENAS_CONVENIOS
FROM TABELAS_DESCONTOS_SUBGRUPOS A WITH(NOLOCK)
JOIN MAIOR_TABELA_DESCONTO J WITH(NOLOCK) ON J.TABELA_DESCONTO = A.TABELA_DESCONTO
JOIN PRODUTOS Z WITH(NOLOCK) ON Z.SUBGRUPO_PRODUTO = A.SUBGRUPO_PRODUTO
LEFT
JOIN TABELAS_DESCONTOS_CLASSES E (NOLOCK) ON E.CLASSE_PRODUTO = Z.CLASSE_PRODUTO
LEFT
JOIN TABELAS_DESCONTOS_MARCAS F (NOLOCK) ON F.MARCA = Z.MARCA
LEFT
JOIN TABELAS_DESCONTOS_MARKUP G (NOLOCK) ON G.PRODUTO = Z.PRODUTO
WHERE GETDATE() BETWEEN A.DATA_HORA_INICIAL AND A.DATA_HORA_FINAL
AND ( ( DATEPART(DW, GETDATE() ) = 1 AND A.DOMINGO = 'S') OR
( DATEPART(DW, GETDATE() ) = 2 AND A.SEGUNDA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 3 AND A.TERCA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 4 AND A.QUARTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 5 AND A.QUINTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 6 AND A.SEXTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 7 AND A.SABADO = 'S') )
AND E.CLASSE_PRODUTO IS NULL
AND F.MARCA IS NULL
AND G.PRODUTO IS NULL
UNION ALL
SELECT A.TABELA_DESCONTO ,
Z.PRODUTO ,
A.TIPO_CALCULO_PRECO_PROMOCAO ,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 1
THEN A.DESCONTO_PADRAO
ELSE 0
END AS DESCONTO_PADRAO ,
A.DATA_HORA_INICIAL,
A.DATA_HORA_FINAL,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 2
THEN A.LUCRO_BRUTO_TABELADO
ELSE 0
END AS LUCRO_BRUTO_TABELADO,
A.APENAS_CLIENTES,
A.APENAS_CONVENIOS
FROM TABELAS_DESCONTOS_CLASSES A WITH(NOLOCK)
JOIN MAIOR_TABELA_DESCONTO J WITH(NOLOCK) ON J.TABELA_DESCONTO = A.TABELA_DESCONTO
JOIN PRODUTOS Z WITH(NOLOCK) ON Z.CLASSE_PRODUTO = A.CLASSE_PRODUTO
LEFT
JOIN TABELAS_DESCONTOS_MARCAS F (NOLOCK) ON F.MARCA = Z.MARCA
LEFT
JOIN TABELAS_DESCONTOS_MARKUP G (NOLOCK) ON G.PRODUTO = Z.PRODUTO
WHERE GETDATE() BETWEEN A.DATA_HORA_INICIAL AND A.DATA_HORA_FINAL
AND ( ( DATEPART(DW, GETDATE() ) = 1 AND A.DOMINGO = 'S') OR
( DATEPART(DW, GETDATE() ) = 2 AND A.SEGUNDA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 3 AND A.TERCA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 4 AND A.QUARTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 5 AND A.QUINTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 6 AND A.SEXTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 7 AND A.SABADO = 'S') )
AND F.MARCA IS NULL
AND G.PRODUTO IS NULL
UNION ALL
SELECT A.TABELA_DESCONTO ,
Z.PRODUTO ,
A.TIPO_CALCULO_PRECO_PROMOCAO ,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 1
THEN A.DESCONTO_PADRAO
ELSE 0
END AS DESCONTO_PADRAO ,
A.DATA_HORA_INICIAL,
A.DATA_HORA_FINAL,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 2
THEN A.LUCRO_BRUTO_TABELADO
ELSE 0
END AS LUCRO_BRUTO_TABELADO,
A.APENAS_CLIENTES,
A.APENAS_CONVENIOS
FROM TABELAS_DESCONTOS_MARCAS A WITH(NOLOCK)
JOIN MAIOR_TABELA_DESCONTO J WITH(NOLOCK) ON J.TABELA_DESCONTO = A.TABELA_DESCONTO
JOIN PRODUTOS Z WITH(NOLOCK) ON Z.MARCA = A.MARCA
LEFT
JOIN TABELAS_DESCONTOS_MARKUP G (NOLOCK) ON G.PRODUTO = Z.PRODUTO
WHERE GETDATE() BETWEEN A.DATA_HORA_INICIAL AND A.DATA_HORA_FINAL
AND ( ( DATEPART(DW, GETDATE() ) = 1 AND A.DOMINGO = 'S') OR
( DATEPART(DW, GETDATE() ) = 2 AND A.SEGUNDA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 3 AND A.TERCA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 4 AND A.QUARTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 5 AND A.QUINTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 6 AND A.SEXTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 7 AND A.SABADO = 'S') )
AND G.PRODUTO IS NULL
UNION ALL
SELECT A.TABELA_DESCONTO ,
Z.PRODUTO ,
A.TIPO_CALCULO_PRECO_PROMOCAO ,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 1
THEN A.DESCONTO_PADRAO
ELSE 0
END AS DESCONTO_PADRAO ,
A.DATA_HORA_INICIAL,
A.DATA_HORA_FINAL,
CASE WHEN A.TIPO_CALCULO_PRECO_PROMOCAO = 2
THEN A.LUCRO_BRUTO_TABELADO
ELSE 0
END AS LUCRO_BRUTO_TABELADO,
A.APENAS_CLIENTES,
A.APENAS_CONVENIOS
FROM TABELAS_DESCONTOS_MARKUP A WITH(NOLOCK)
JOIN MAIOR_TABELA_DESCONTO J WITH(NOLOCK) ON J.TABELA_DESCONTO = A.TABELA_DESCONTO
JOIN PRODUTOS Z WITH(NOLOCK) ON Z.PRODUTO = A.PRODUTO
WHERE GETDATE() BETWEEN A.DATA_HORA_INICIAL AND A.DATA_HORA_FINAL
AND ( ( DATEPART(DW, GETDATE() ) = 1 AND A.DOMINGO = 'S') OR
( DATEPART(DW, GETDATE() ) = 2 AND A.SEGUNDA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 3 AND A.TERCA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 4 AND A.QUARTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 5 AND A.QUINTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 6 AND A.SEXTA_FEIRA = 'S') OR
( DATEPART(DW, GETDATE() ) = 7 AND A.SABADO = 'S') ) ```