【问题标题】:select only distinct value from one column仅从一列中选择不同的值
【发布时间】:2014-03-17 03:41:33
【问题描述】:

我正在显示我的查询中的三个字段,并且我想显示一个不同的银行业务编号。即使它们不明显,我仍然想显示其他字段。请帮忙。

SELECT  C.RECEIPT_OFFICE_PREFIX, B.BANKING_NO, B.STATUS_CD
FROM    TControl B, TComponent C
WHERE   C.DEPOSIT_BANK_ACCT = 'xxx-xxxxxx-xxxxx'
AND     B.BANKING_NO = C.BANKING_NO
AND     B.COMPANY_ID = C.COMPANY_ID
AND     B.RECEIPT_OFFICE_PREFIX = C.RECEIPT_OFFICE_PREFIX
AND     B.STATUS_CD != 'C'
ORDER BY B.BANKING_NO

我使用的是 Sybase ASE 12.5

【问题讨论】:

  • 这是不可能的,除非您以某种方式提示数据库选择您想要的记录。据我所知,这是不可能的。

标签: sql select distinct sybase sap-ase


【解决方案1】:

Sybase 的最新版本支持row_number()。您可以在这样的子查询中使用它:

SELECT RECEIPT_OFFICE_PREFIX, BANKING_NO, STATUS_CD
FROM (SELECT C.RECEIPT_OFFICE_PREFIX, B.BANKING_NO, B.STATUS_CD,
             ROW_NUMBER() OVER (PARTITION BY B.BANKING_NO ORDER BY B.BANKING_NO) as seqnum
      FROM TControl B JOIN
           TComponent C
           ON B.BANKING_NO = C.BANKING_NO AND B.COMPANY_ID = C.COMPANY_ID
      WHERE C.DEPOSIT_BANK_ACCT = 'xxx-xxxxxx-xxxxx' AND     
            B.RECEIPT_OFFICE_PREFIX = C.RECEIPT_OFFICE_PREFIX AND
            B.STATUS_CD != 'C'
    ) BC
WHERE seqnum = 1
ORDER BY BANKING_NO;

【讨论】:

  • 我使用的是 Sybase 12.50,但我的 DBSolo 无法识别 OVER。
  • 那也不支持rowid。如果表有主键,您可以这样做。
【解决方案2】:

你想要的可能不会被称为 distint。如果其余数据相同,则只需使用 DISTINCT 即可。但是,如果数据可能不同,您需要告诉数据库应该选择什么结果。第一行?最后一行?

如果你不介意就用;

SELECT DISTINCT  MAX(C.RECEIPT_OFFICE_PREFIX), B.BANKING_NO, MAX(B.STATUS_CD)
FROM    TControl B, TComponent C
WHERE   C.DEPOSIT_BANK_ACCT = 'xxx-xxxxxx-xxxxx'
AND     B.BANKING_NO = C.BANKING_NO
AND     B.COMPANY_ID = C.COMPANY_ID
AND     B.RECEIPT_OFFICE_PREFIX = C.RECEIPT_OFFICE_PREFIX
AND     B.STATUS_CD != 'C'
GROUP BY B.BANKING_NO

在你需要选择一行时使用 Gordon 解决方案。

【讨论】:

  • Distinct 完成了这项工作。我创建了 4 个具有不同列条目的事务,并且脚本有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多