Sql 基本问题
嗨,我有这样的数据:Sql 基本问题,sql,db2-400,Sql,Db2 400,嗨,我有这样的数据: otord# otusrn ottrnc ojhttn$ ottrnd ---------------------------------------------------------------------- 123 Joe AAA 100.00 07/17/15 123 Joe
otord# otusrn ottrnc ojhttn$ ottrnd
----------------------------------------------------------------------
123 Joe AAA 100.00 07/17/15
123 Joe BBB 100.00 07/16/15
我做了这个选择:我真的只想在订单和金额上选择distinct。但我还想展示otusrn和代码,它们是该distinct的一部分。所以我想要123和100美元作为唯一的,但“标记”其他列,这就是它要做的吗
SELECT DISTINCT otord#,
ohttn$,
ottrnd
FROM replib.clspaytpl
WHERE otusrn IN ('ANDON', 'SCH', 'JRU', 'BERT', 'TRA', 'LINA')
AND ottrnd >= 20140701
您的问题是,您没有指定要对列中的标记执行的操作,因为它们不是唯一的,您可能会对同一条记录产生许多结果。您要么必须将它们包含在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$
要仅检索与标题记录关联的组中的第一条详细信息记录,可以使用如下语法:
otord# otusrn ottrnc ojhttn$ ottrnd
----------------------------------------------------------------------
123 Joe AAA 100.00 07/17/15
123 Joe BBB 100.00 07/16/15
头部为otord,ojhttn$as
选择ojhttn和ojhttn$
来自replib.clspaytpl
其中,otusrn在‘ANDON’、‘SCH’、‘JRU’、‘BERT’、‘TRA’、‘LINA’中
和ottrnd>=20140701
选择h.OTRD、h.ojhttn$、d.otusrn、d.ottrnc、d.ottrnd
从h头开始,
表格选择*
来自replib.clspaytpl
式中,otord=h.otord
和ojhttn$=h.ojhttn$
和奥图斯恩在《安顿》,《施》,《JRU》,《伯特》,《特拉》,《丽娜》中
和ottrnd>=20140701
仅获取第一行数据
如果您有一个真正的头文件,每个订单/金额只包含一条记录,您可以使用它来代替CTE公共表表达式。如果不同的订单和金额有不同的otusrn和代码,该怎么办?您希望显示哪些值?我们可以使用第一个值。这不一定会在表中为您提供单个物理记录,而是提供单个OTRD,ojhttn$,其中otusrn、ottrnc和ottrnd的最大值彼此独立。也就是说,可以从不同的记录返回otusrn、ottrnc和ottrnd。Max不返回第一个值,而是组列中的最大值。正确,但在这种情况下,几乎可以预期标记值不一定与结果一致。您可能会得到一个由3条不同记录的信息组成的单行,其中包含相同的OTRD和ojhttn$。这取决于您希望对“沿标记”值执行的操作