在查询结果集中添加列以查询结果

时间:2018-03-12 17:56:40

标签: sql sql-server

我有以下查询,它返回结果集中的13行。如果我取消注释l.line_no,则查询将返回结果集中的19行。我在过去一小时内多次运行此操作并确认数据集未发生变化。

我缺少一些关键的SQL逻辑吗?根据我的经验,添加列不应该添加行。

select distinct
  -- l.line_no,
  l.item_no,
  l.Ord_no as ord_no,
  (select top 1
    pro_no
  from
    wsPKGShipment s
  where
    s.Shipment_No = max(p.Shipment_No)
  order by s.shipped_dt + s.shipped_tm desc) as pro_no
from
  wsPKGLin l
    join
  wsPKG p on p.PKG_ID = l.PKG_ID
where ltrim(l.Ord_no) = '<order number>'

2 个答案:

答案 0 :(得分:2)

您必须关注查询的distinct子句。如果您有此示例数据:

c1 | c2 | c3
a  | a  | c
b  | b  | c
a  | a  | d

你写道:

select distinct c1, c2 from mytable

您将获得列c1和c2的不同组合:

c1 | c2 
a  | a 
b  | b 

但是,如果你将查询变为:

select distinct c1, c2, c3 from mytable

您将显示一条额外的记录,因为它与添加新列的前两个记录不同:

   c1 | c2 | c3
    a  | a  | c
    b  | b  | c
    a  | a  | d

答案 1 :(得分:1)

select distinct适用于所有所选列。如果添加另一列,则它也适用于该列。

因此,这种行为并不令人惊讶。如果您查看19行,除了lineno之外,您可能会看到13组值。