【问题标题】:How to filter Design from CustomerCode in SQL Server如何在 SQL Server 中从 CustomerCode 中筛选设计
【发布时间】:2021-10-30 19:22:20
【问题描述】:

我创建了一个名为 tblTread 的表,其中包含以下列和示例数据:

   TreadId  TreadSize   Design  SupplierCode    SupplierName
   ----------------------------------------------------------
    3025    150          R        SU01            ALEX
    3026    150          L        SU01            ALEX
    3027    150          R        SU02            SANDANUWAN
    3028    150          L        SU02            SANDANUWAN

现在我想通过SupplierCode 过滤TreadSizeDesign。我试图这样做,但我得到了以下输出。

SELECT Design
FROM tblTread
WHERE TreadSize = '150' 

输出:

       Design
         R
         L
         R
         L

但是在这里我只想得到与SupplierCode相关的Design,像这样

    Design
      R
      L

【问题讨论】:

  • 我只想获得与 SupplierCode 相关的设计 - 所以 which supplierCode?​​span>
  • 也许 ... 从 tblTread 中选择不同的设计,其中 TreadSize = '150' 和 SupplierCode = 'SU01'

标签: sql sql-server tsql sql-server-2017


【解决方案1】:

我怀疑你正在阅读这个结果集:

Design
R
L
R
L

并且您期望,因为重复相同的值,SQL Server 应该合并这些结果,因为它不会向您显示记录不同的原因。

查询引擎不会也不能减少或合并返回的行数,除非得到指示,否则无论返回的列数、它们的值或它们的显示顺序如何。

为了整合您的结果,您必须向查询引擎提供有关如何执行整合的说明。 @John Cappelletti 的评论说明了执行此操作的三种方法:添加 DISTINCT 关键字以消除选择返回的列中的冗余值;提供额外的WHERE 谓词以将结果限制为特定条件(例如供应商代码);或者同时做这两件事。

根据您陈述为“我只想获得与SupplierCode 相关的Design”的逻辑要求,这些选项中的第三个可能是最正确的。这种方法,DISTINCT 在 SupplierCode 上带有 WHERE 谓词,将从结果集中删除其他供应商的行,并且还将根据 SELECT 中指定的列的值删除冗余行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 2020-07-22
    • 1970-01-01
    相关资源
    最近更新 更多