【问题标题】:ASP.NET SQL Select Statement, Conditional Where by ParameterASP.NET SQL Select 语句,条件式 Where 参数
【发布时间】:2018-05-02 13:01:26
【问题描述】:

我正在处理一个 ASP.NET 页面,并使用搜索框从我的 Oracle 数据库中查询数据的网格视图。截至目前,我有一个参数文本框(“InventorySearchBox”)。这使我能够搜索一列。我添加了另一个参数,一个下拉列表(“InventoryDropDownList”),但我不知道如何在我的选择语句中使用它。基本上, ("InventoryDropDownList") 现在有两个列表项,但可能会增加,根据列表选择,我希望搜索框与不同的列相关。

所以:如果参数 ("InventoryDropDownList") = 'searchbyproductcode' 然后参数 ("InventorySearchBox") = tp.product_code else If parameter ("InventoryDropDownList") = 'searchbydescription' then parameter ("InventorySearchBox") like tic.product_description

TL;DR:下拉列表定义搜索框对应的列。这是我的代码,它在没有下拉列表的情况下工作。我尝试了 IF 语句、BEGIN、END 和 CASE 语句,但还没有弄清楚。非常感谢任何帮助。

SELECT tp.product_code,
    tic.product_description,
    til.location,
    SUM(trt.inventory_balance) QTY,
    trt.uom
FROM treceipt_transaction trt, tinventory_location til, tinventory_control tic, tproduct tp
WHERE trt.receipt_location = til.location AND
    trt.category_no = tic.category_no AND
    trt.product_description = tic.product_description AND
    trt.uom_schedule_id = tic.uom_schedule_id AND
    trt.uom = tic.uom AND
    tic.category_no = tp.category_no AND
    tic.product_description = tp.product_description AND
    tic.uom_schedule_id = tp.uom_schedule_id AND
    tp.product_code = :product_code AND
    trt.inventory_balance <> 0
GROUP BY tp.product_code, tic.product_description, til.location, trt.uom
ORDER BY til.location

我曾尝试做类似的事情:

 WHERE trt.receipt_location = til.location AND
        trt.category_no = tic.category_no AND
        trt.product_description = tic.product_description AND
        trt.uom_schedule_id = tic.uom_schedule_id AND
        trt.uom = tic.uom AND
        tic.category_no = tp.category_no AND
        tic.product_description = tp.product_description AND
        tic.uom_schedule_id = tp.uom_schedule_id AND
        IF(:InventoryDropDownList = 'searchbyproductcode' THEN
        tp.product_code = :InventorySearchBox ELSE IF
        :InventoryDropDownList = 'searchbydescription' THEN
        tic.product_description = :InventorySearchBox) AND
        trt.inventory_balance <> 0

提前致谢!

【问题讨论】:

    标签: c# jquery sql asp.net oracle


    【解决方案1】:

    您可以使用案例来执行此操作:

    WHERE
      trt.receipt_location = til.location AND
      trt.category_no = tic.category_no AND
      trt.product_description = tic.product_description AND
      trt.uom_schedule_id = tic.uom_schedule_id AND
      trt.uom = tic.uom AND
      tic.category_no = tp.category_no AND
      tic.product_description = tp.product_description AND
      tic.uom_schedule_id = tp.uom_schedule_id AND
      CASE WHEN :InventoryDropDownList = 'searchbyproductcode' THEN tp.product_code
           WHEN :InventoryDropDownList = 'searchbydescription' THEN tic.product_description
           ELSE :InventorySearchBox
      END = :InventorySearchBox AND
      trt.inventory_balance <> 0
    

    注意使用 ELSE 和 :InventorySearchBox = :InventorySearchBox 允许此检查为“默认”,如果下拉菜单上没有选择或无效,则此检查无效。

    【讨论】:

    • 对于 CASE 中的第二个 WHEN 语句,我如何将它变成 LIKE 语句?如下所示: WHEN :InventoryDropDownList = 'searchbydescription' THEN tic.product_description 我尝试将其更改为: WHEN :InventoryDropDownList = 'searchbydescription' LIKE '%tic.product_description%' 但它不起作用。
    • 如果您想这样做,请将END 之后的= 更改为LIKE。不是一个好主意,比如运算符很慢,特别是如果你以通配符开头。在某些平台上,您还可以使用CONTAINS 而不是=LIKE 仍然很慢。
    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 2022-01-14
    • 2013-03-08
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    相关资源
    最近更新 更多