我有这样的数据:
otord# otusrn ottrnc ojhttn$ ottrnd
----------------------------------------------------------------------
123 Joe AAA 100.00 07/17/15
123 Joe BBB 100.00 07/16/15
我做了这个选择:我真的只想在订单#和amt上选择distinct。但我想要展示otusrn和代码,这是其中的一部分。所以我想要123和100 $作为唯一但其他列的“标记”是什么呢?
SELECT DISTINCT otord#,
ohttn$,
ottrnd
FROM replib.clspaytpl
WHERE otusrn IN ('ANDON', 'SCH', 'JRU', 'BERT', 'TRA', 'LINA')
AND ottrnd >= 20140701
答案 0 :(得分:1)
您的问题是,您没有指定您想要使用"标签沿着"列,因为它们不是唯一的,您可以为同一记录获得许多结果。您必须将它们包含在distinct子句中,或者从许多可能的记录中选择一个。
如果您并不真正关心"标签的价值,那么"在列中,您可以对它们使用max()来仅返回最大值,但请记住,当它们不同时,您将丢失数据。如下所示:
SELECT otord#, max(otusrn), max(ottrnc), ojhttn$, max(ottrnd)
FROM replib.clspaytpl
WHERE otusrn IN ('ANDON', 'SCH', 'JRU', 'BERT', 'TRA', 'LINA')
AND ottrnd >= 20140701
group by otord#, ojhttn$
答案 1 :(得分:1)
要仅检索与标题记录连接的组中的第一个详细记录,您可以使用如下语法:
WITH head (otord#, ojhttn$) as (
SELECT DISTINCT otord#, ojhttn$
FROM replib.clspaytpl
WHERE otusrn in ('ANDON','SCH','JRU','BERT','TRA','LINA')
AND ottrnd >= 20140701)
SELECT h.otord#, h.ojhttn$, d.otusrn, d.ottrnc, d.ottrnd
FROM head h,
TABLE (SELECT *
FROM replib.clspaytpl
WHERE otord# = h.otord#
AND ojhttn$ = h.ojhttn$
AND otusrn in ('ANDON','SCH','JRU','BERT','TRA','LINA)
AND ottrnd >= 20140701
FETCH FIRST ROW ONLY) d
如果您有一个真实的头文件,每个订单/金额只包含一个记录,您可以使用它而不是CTE(公用表表达式)。