在雪花中的临时 table 中计算大小写
Having count with case when in a temporary table in snowflake
我正在尝试根据 having count 条件对 return a table 进行查询,如果行数 > 2,那么它应该 return 只有我一个字段的最大值并与另一个 table 合并。如果它等于 1,那么只需拉出 table 的所有内容,它看起来有点像这样,我不知道雪花的正确语法:
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
我将结果留在此处,如您所见,我有相同的 serialNumber 和两条记录,这没关系,但我只需要一条。那将是具有最长日期时间或最大客户订单号的那个。我尝试通过查询最大值进行查询,但在这两个字段中都没有取得任何成果,我仍然得到两条记录,而不是只有一条具有最大值的记录
恐怕您不能在任何数据库中以纯 SQL 的形式真正执行条件联合,也不能将 HAVING 子句用于除分组结果优化之外的任何其他用途。
如果你想return排在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
你的问题不清楚这应该是整个 table 的最大值 ordernumber
还是一个组的最大值 ordernumber
- 根据你附加的图像,听起来像你想要每个 serialnumber
的最大 ordernumber
,所以这就是我划分的。但是,如果您希望某个项目或客户的最大 ordernumber
分别为 itemdescription
或 customername
,则可以将该分区设为 customername
。
我正在尝试根据 having count 条件对 return a table 进行查询,如果行数 > 2,那么它应该 return 只有我一个字段的最大值并与另一个 table 合并。如果它等于 1,那么只需拉出 table 的所有内容,它看起来有点像这样,我不知道雪花的正确语法:
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 我将结果留在此处,如您所见,我有相同的 serialNumber 和两条记录,这没关系,但我只需要一条。那将是具有最长日期时间或最大客户订单号的那个。我尝试通过查询最大值进行查询,但在这两个字段中都没有取得任何成果,我仍然得到两条记录,而不是只有一条具有最大值的记录
恐怕您不能在任何数据库中以纯 SQL 的形式真正执行条件联合,也不能将 HAVING 子句用于除分组结果优化之外的任何其他用途。
如果你想return排在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
你的问题不清楚这应该是整个 table 的最大值 ordernumber
还是一个组的最大值 ordernumber
- 根据你附加的图像,听起来像你想要每个 serialnumber
的最大 ordernumber
,所以这就是我划分的。但是,如果您希望某个项目或客户的最大 ordernumber
分别为 itemdescription
或 customername
,则可以将该分区设为 customername
。