Ниже приведен пример для BigQuery Standard Sql
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'Agent1' Agent_Name, '0001' Test_ID, 95 Agent_Score UNION ALL
SELECT 'Agent2', '0002', 93 UNION ALL
SELECT 'Agent2', '0003', 85 UNION ALL
SELECT 'Agent3', '0004', 99 UNION ALL
SELECT 'Agent4', '0005', 100 UNION ALL
SELECT 'Agent5', '0006', 88
), list AS (
SELECT Agent
FROM UNNEST(['Agent1', 'Agent2']) Agent
)
SELECT * FROM `project.dataset.table` WHERE Agent_Name IN (SELECT Agent FROM list)
UNION ALL
SELECT * FROM `project.dataset.table` WHERE NOT EXISTS (
SELECT 1 FROM `project.dataset.table` t
JOIN list l ON l.Agent = t.Agent_Name
)
Выше может быть изменен рефакторинг на чуть менее подробную версию
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'Agent1' Agent_Name, '0001' Test_ID, 95 Agent_Score UNION ALL
SELECT 'Agent2', '0002', 93 UNION ALL
SELECT 'Agent2', '0003', 85 UNION ALL
SELECT 'Agent3', '0004', 99 UNION ALL
SELECT 'Agent4', '0005', 100 UNION ALL
SELECT 'Agent5', '0006', 88
), list AS (
SELECT Agent
FROM UNNEST(['Agent1', 'Agent2']) Agent
)
SELECT * FROM `project.dataset.table`
WHERE Agent_Name IN (SELECT Agent FROM list)
OR NOT EXISTS (
SELECT 1 FROM `project.dataset.table` t
JOIN list l ON l.Agent = t.Agent_Name
)
Идея состоит в том, чтобы использовать SESSION_USER () или CURRENT_USER (), чтобы проверить имя_агента пользователя, а затем вернуть ...
Итак, наконец
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'Agent1' Agent_Name, '0001' Test_ID, 95 Agent_Score UNION ALL
SELECT 'Agent2', '0002', 93 UNION ALL
SELECT 'Agent2', '0003', 85 UNION ALL
SELECT 'Agent3', '0004', 99 UNION ALL
SELECT 'Agent4', '0005', 100 UNION ALL
SELECT 'Agent5', '0006', 88
)
SELECT *, SESSION_USER() FROM `project.dataset.table`
WHERE Agent_Name = SESSION_USER()
OR NOT EXISTS (
SELECT 1 FROM `project.dataset.table` t
WHERE Agent_Name = SESSION_USER()
)