簡體   English   中英

Oracle 查詢以從第 1 列返回第 2 列中某些值的值

[英]Oracle query to return values from column 1 for certain values in column 2

我有一個從 4 個表中獲取數據的語句。 這個 select 語句的結果將從一開始就為我提供我需要的信息。 然后我有第二個 select 語句,我想在其中過濾這些結果。

聲明看起來像這樣

WITH temp
     AS (SELECT "username",
                Max("session_start_time") AS "START_TIME",
                "product_name"
         FROM   (SELECT "PPM"."ppm_logon_sessions"."session_start_time" AS
                        "SESSION_START_TIME",
                        "PPM"."ppm_logon_sessions"."username"           AS
                        "USERNAME"
                        ,
                        "PPM"."ppm_logon_sessions"."user_id"
                        AS "USER_ID",
                        "Knta User Products"."product_id"               AS
                        "PRODUCT_ID",
                        "Knta User Products"."user_id"                  AS
                        "USER_ID_2",
                        "Knta User Products"."user_product_id"          AS
                        "USER_PRODUCT_ID",
                        "Knta License Usage V"."product_name"           AS
                        "PRODUCT_NAME"
                 FROM   "PPM"."ppm_logon_sessions"
                        left join "PPM"."knta_user_products"
                                  "Knta User Products"
                               ON "PPM"."ppm_logon_sessions"."user_id" =
                                  "Knta User Products"."user_id"
                        left join "PPM"."knta_license_usage_v"
                                  "Knta License Usage V"
                               ON "Knta User Products"."product_id" =
                                  "Knta License Usage V"."product_id")
         GROUP  BY "username", "product_name")
SELECT "username", "product_name"
FROM   temp
WHERE  "start_time" > Trunc(Cast(SYSDATE AS TIMESTAMP)
                            + Numtodsinterval(-30, 'day'), 'day')
       AND "product_name" IS NOT NULL

現在這將返回一組如下所示的結果:

查詢的輸出

如果僅返回僅存在於某些產品中的用戶名,我想做什么,例如,如果我只想過濾出具有“配置”和“用戶管理”產品名稱的用戶,它應該只給我那些用戶,而不是用戶具有“配置”和“用戶管理”和“程序管理”的

您可以使用LEADLAG分析函數來執行此操作。

演示:

在下面的示例數據中,它只會返回'Configuration', 'User Administration'中具有產品的username ,如果其他則過濾:

with t AS
( 
  select 'mat_m' username, 'Configuration' product_name from dual
  union all
  select 'mat_m' username, 'Program Management' product_name from dual
  union all
  select 'mat_m' username, 'Project Management' product_name from dual
  union all
  select 'nel_d' username, 'User Administration' product_name from dual
  union all
  select 'nel_d' username, 'Program Management' product_name from dual
  union all
  select 'nel_d' username, 'Portfolio Management' product_name from dual
  union all
  select 'puth_a' username, 'Configuration' product_name from dual
  union all
  select 'puth_a' username, 'User Administration' product_name from dual
 )
 SELECT username, product_name
 FROM(
    SELECT username, 
           product_name,
           lead(product_name) over(partition by username order by product_name) lead,
           lag(product_name) over(partition by username order by product_name) lag
    FROM t
    )
WHERE product_name IN ('Configuration', 'User Administration')
AND 
(
    lag IN ('Configuration', 'User Administration')
  OR
    lead IN ('Configuration', 'User Administration')
);

Output:

USERNAME PRODUCT_NAME        
-------- --------------------
puth_a   Configuration       
puth_a   User Administration

暫無
暫無

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

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