Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基本问题_Sql_Db2 400 - Fatal编程技术网

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$。这取决于您希望对“沿标记”值执行的操作