簡體   English   中英

在使用帶有 DISTINCT 的 LISTAGG function 時需要幫助

[英]Need help in using LISTAGG function with DISTINCT

Select ID, 
 LISTAGG(DISTINCT VIEW_NM, ',') WITHIN GROUP(ORDER BY CAST(VISIT_PAGE_NBR as INT)) 
 AS No_Of_Views
FROM db_name.schema_name.tbl_name 
WHERE FLG_COLUMN = '0'
AND SOURCE_CD NOT IN ('1','2','3','4')
AND DATE_CR = '2022-01-01'
GROUP BY ID;

我希望以 ASC 或 DESC 順序顯示 VIEW_NM 列值。 但是當我做一個 DISTINCT VIEW_NM 時,我得到 - 它不是一個有效的 ORDER BY 表達式。 需要幫助來解決這個問題。

另外,我不希望 VIEW_NM 列的值被復制。 請建議如何做到這一點..

使用 cte 過濾出每個 ID 的多個 VIEW_NM(選擇具有最低 VIST_PAGE_NBR 的一個):

WITH cte AS (
  SELECT ID, VIEW_NM, VISIT_PAGE_NBR::INT AS VISIT_PAGE_NBR
  FROM db_name.schema_name.tbl_name 
  WHERE FLG_COLUMN = '0'
    AND SOURCE_CD NOT IN ('1','2','3','4')
    AND DATE_CR = '2022-01-01'
  QUALIFY ROW_NUMBER() OVER(PARTITION BY ID,VIEW_NM ORDER BY VISIT_PAGE_NBR) = 1
)
SELECT ID,
    LISTAGG(VIEW_VM, ',') WITHIN GROUP(ORDER BY VISIT_PAGE_NBR) AS No_Of_Views
FROM cte
GROUP BY ID;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM