【问题标题】:SQL Query, sorting when vales are both Int and CharactersSQL 查询,当值既是 Int 又是 Characters 时进行排序
【发布时间】:2019-10-23 05:00:24
【问题描述】:

我在一个客户网站上工作,我们在他们的网站上有一个订单表格,允许他们选择他们的部门,然后选择特定于他们部门的产品,最后一旦他们选择了产品,他们将获得数量选项。所有这些字段都是通过一个数据库中的 SQL 查询填充的,该数据库列出了所有部门、产品和数量选项。

让我先说我在 SQL 方面非常初学者,这是我自己的一个小项目,我正在努力简化我们的一些流程。所以对我放轻松。

我遇到的问题是排序问题,我必须将 Quantity 数据库列设置为 VARCHAR,因为它不仅仅是整数,例如,某些产品的数量选项可能只有 250、500、1000,但其他产品可能有 10 个焊盘、20 个焊盘、50 个焊盘等的数量选项。

我们使用的表单模块具有我假设的基本 SQL 查询输入,因为它们提供的查询示例只是语法字符串,不像我在一些试图解决此问题的研究中看到的那样。

这是我为回调数据而编写的查询:

select distinct Quantity 
from GSD_Products 
where Form = [Form] 
order by Quantity ASC

所以我的问题是,当表单上的下拉字段为我的一些产品填充时,这些数据不是 INT,它们只是 INT,它们不是正常的升序:

1000
250
2500
500
5000

我希望它们显示为:

250
500
1000
2500
5000

其他包含 int 和 characters 混合的产品数量以适当的顺序列出,例如:

10 个焊盘、20 个焊盘、50 个焊盘。

确实有人向我指出了可能解析 NVARCHAR 值的方向,我一直在尝试对此进行研究,但我缺乏知识只是了解在这种情况下我可以尝试哪些选项的障碍。

【问题讨论】:

    标签: sql sorting


    【解决方案1】:

    您的值存储为字符串,因此它们按字符串排序。一种方法是转换它们,如下所示:

    order by cast(Quantity as int) ASC
    

    如果你必须同时处理数字和非数字值,那么另一种方法是按长度和值排序:

    order by len(Quantity), Quantity
    

    这不存在类型转换错误的风险。

    【讨论】:

    • 我尝试了这两个选项,我收到一条错误消息:请指定有效的 sql 查询我不确定这是不是因为这种形式的 SQL 查询功能更基本,它不允许用于更复杂的查询。
    • @JerodBrown 。 . .这些是 ORDER BY 子句,在它们之前需要 SELECT 等等。
    【解决方案2】:

    我会在产品表上有另一个字段,称为描述,您可以在其中放置“垫”。如果 sql 查询控制顺序,那么您可以简单地连接控件中的 int 和 char 列,但不能连接 order by 子句。如果控件(如组合框)控制订单,那么我将只在控件中输入数量,然后在其旁边放置一个标签以显示描述。

    【讨论】:

    • 我最初确实尝试过,但我们使用的表单模块不允许我放置任何变量数据或从 SQL 中提取的数据作为标签。如果这些信息被分离出来,我假设没有办法使用 SQL 查询来组合来自 2 列的数据? QTY 和 Description 使用查询将列分隔为 QTY Description。
    • 您可以使用文本框并将其设为只读以用作标签吗?如果不是那太不幸了。在这种情况下,重要的是要知道查询是否控制了控件的顺序。另外值得注意的是,一些表单构建软件将允许在一个控件中使用两列,如组合框,并允许您对您选择的那一列进行排序。
    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 2017-09-08
    • 2022-09-24
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    相关资源
    最近更新 更多