首页 > 解决方案 > 如何在 WHERE 子句中选择什么 CONTAINS 而不是选择 ONLY WHAT IS EQUAL?

问题描述

我有一个存储过程,它在我的 reportviewer 中填充一个表格,如下所示:

╔════════╦═══════════╗
║ SALES  ║ PRODUCTS  ║
╠════════╬═══════════╣
║ sale 1 ║ Product A ║
║        ║ Product B ║
║        ║ Product C ║
╠════════╬═══════════╣
║ sale 2 ║ Product D ║
║        ║ Product A ║
║        ║ Product F ║
╠════════╬═══════════╣
║ sale 3 ║ Product B ║
║        ║ Product G ║
║        ║ Product C ║
╠════════╬═══════════╣
║ sale 4 ║ Product A ║
╚════════╩═══════════╝

我需要过滤销售,我只想显示具有特定产品的销售,例如:如果我只想查看具有 的销售,Product A则必须是以下结果:

╔════════╦═══════════╗
║ SALES  ║ PRODUCTS  ║
╠════════╬═══════════╣
║ sale 1 ║ Product A ║
║        ║ Product B ║
║        ║ Product C ║
╠════════╬═══════════╣
║ sale 2 ║ Product D ║
║        ║ Product A ║
║        ║ Product F ║
╠════════╬═══════════╣
║ sale 4 ║ Product A ║
╚════════╩═══════════╝

但是我拥有的过滤器将其返回给我:

╔════════╦═══════════╗
║ SALES  ║ PRODUCTS  ║
╠════════╬═══════════╣
║ sale 4 ║ Product A ║
╚════════╩═══════════╝

这是我的过滤器:

SELECT cabecalho.ID, cabecalho.NaturezaOperacao, cabecalho.DataEmissao, cabecalho.ValorTotal, NFI.ID_NF, PS.ProductName, NFI.Quantidade, NFI.ValorUnitario
FROM(
SELECT NF.ID, NF.NaturezaOperacao, NF.DataEmissao, NF.ValorTotal
FROM NotaFiscal NF INNER JOIN
    Venda V
ON NF.ID_Venda = V.ID INNER JOIN
    Usuario U 
ON V.ID_UsuarioComissao1 = U.ID
WHERE
    ((U.Descricao = @usuario) OR (@usuario IS NULL)) AND
    (NF.DataEmissao >= @dataEmissao AND NF.DataSaida <= @dataSaida)) cabecalho 


                      ======== ANOTHER JOINS =========        

WHERE
    ((U.Descricao = @usuario) OR (@usuario IS NULL)) AND
    (NF.DataEmissao >= @dataEmissao AND NF.DataSaida <= @dataSaida) AND
    ((PS.ProductName LIKE '%' + @product + '%') OR (@product IS NULL))
ORDER BY 
    CASE WHEN @ordem = 'value' THEN cabecalho.ValorTotal END DESC,
    CASE WHEN @ordem = 'date' THEN cabecalho.DataEmissao END DESC

我如何解决它?

标签: sqlsql-serverselectstored-procedureswhere-clause

解决方案


推荐阅读