我正在尝试根据具有计数条件来查询返回表,如果行计数> 2,则它应该仅返回字段的最大值并与另一个表进行联合。如果等于1,则只需拉表中的所有内容,它看起来就会像这样,我不知道雪花的正确语法:
WITH TEMP_SHIPMENTS AS (
SELECT
ORDERNUMBER,
POSITIONNUMBER,
ITEMCODE,
ITEMDESCRIPTION,
SHIPMENTNUMBER,
LOAD,
QUANTITY,
SERIALNUMBER,
CUSTOMERNAME,
SHIPTOADDRESS,
MAX(CUSTOMERORDER),
CUSTOMERLINE,
DELIVERYDATE
FROM
T_SHIPMENTS
GROUP BY
ORDERNUMBER,
POSITIONNUMBER,
ITEMCODE,
ITEMDESCRIPTION,
SHIPMENTNUMBER,
LOAD,
QUANTITY,
SERIALNUMBER,
CUSTOMERNAME,
SHIPTOADDRESS,
CUSTOMERORDER,
CUSTOMERLINE,
DELIVERYDATE
)
CASE WHEN HAVING COUNT FROM TEMP_SHIPMENTS.CUSTOMERORDER >2
THEN
SELECT ORDERNUMBER,
POSITIONNUMBER,
ITEMCODE,
ITEMDESCRIPTION,
SHIPMENTNUMBER,
LOAD,
QUANTITY,
SERIALNUMBER,
CUSTOMERNAME,
SHIPTOADDRESS,
CUSTOMERORDER,
CUSTOMERLINE,
MAX(DELIVERYDATE)
FROM TEMP_SHIPMENTS;
关于如何实现它的任何想法?
SELECT
ORDERNUMBER,
POSITIONNUMBER,
ITEMCODE,
ITEMDESCRIPTION,
SHIPMENTNUMBER,
LOAD,
QUANTITY,
SERIALNUMBER,
CUSTOMERNAME,
SHIPTOADDRESS,
CUSTOMERORDER,
CUSTOMERLINE,
DELIVERYDATE
FROM
T_SHIPMENTS
WHERE SerialNumber = '012501003449' ;
Result table from query 我将结果留在了这里,如您所见,我有两个记录的序列号相同,也可以,但是我只需要一个。那将是具有最大日期时间或最大客户订单号的日期。我尝试通过最大值查询,但在这两个字段中均未获得任何结果,我仍然得到两条记录,而不是只有一条具有最大值
答案 0 :(得分:0)
恐怕您不能真正在任何数据库中使用纯SQL进行条件联合,也不能将HAVING子句用于除对结果进行分组以外的其他任何事情。
答案 1 :(得分:0)
如果您想返回MAX(CUSTOMERORDER)
的行,我会尝试:
WITH TEMP_SHIPMENTS AS (
SELECT ROW_NUMBER() over (PARTITION BY SERIALNUMBER ORDER BY CUSTOMERORDER desc) row_num,
ORDERNUMBER,
POSITIONNUMBER,
ITEMCODE,
ITEMDESCRIPTION,
SHIPMENTNUMBER,
LOAD,
QUANTITY,
SERIALNUMBER,
CUSTOMERNAME,
SHIPTOADDRESS,
CUSTOMERORDER,
CUSTOMERLINE,
DELIVERYDATE
FROM
T_SHIPMENTS
)
SELECT *
FROM TEMP_SHIPMENTS
WHERE row_num = 1
您的问题尚不清楚,这应该是整个表的最大值ordernumber
还是一个组的最大值ordernumber
-根据您所附加的图像,听起来您想要的是最大值{{1 }}中的每个ordernumber
,这就是我划分的内容。但是,如果您要分别分配商品或客户的最大serialnumber
,则可以将该分区设置为itemdescription
或customername
。