首页 > 解决方案 > 了解此查询中的位置

问题描述

我已经多次尝试使用 , 等来“分组”这个查询的 Group By结果Distinct

我了解我想要实现的目标,结合多个结果,但我对 SQL 还是很陌生。我一直在尝试几个子句,但似乎没有任何效果。我一天中的大部分时间都在做这件事。我终于不知所措了。

先感谢您。

SELECT
  PAYER_PLAN_NAME,PAYER_NAME,ACTUAL_BEGIN_DATETIME,
  ACTUAL_END_DATETIME,CLIENT_NAME,BEGIN_DATE,END_DATE,
  POLICY_NUMBER,ID_NUMBER 
FROM RPT_CLIENT_PAYER_PLAN P
JOIN RPT_SCHEDULED_ACTIVITIES A ON P.CLIENT_ID = A.CLIENT_ID
WHERE trunc(ACTUAL_BEGIN_DATETIME) >= ${p_begin_time} 
  AND trunc(ACTUAL_END_DATETIME) <= ${p_end_time}
  AND trunc(BEGIN_DATE) <= ${END_DATE}
  AND trunc(END_DATE)> ${BEGIN_DATE} 
   OR trunc(END_DATE) IS NULL

标签: sql

解决方案


这只是一个示例,但它可能会帮助您了解 GROUP BY 功能的工作原理:

SELECT CLIENT_NAME
   , min(BEGIN_DATE) AS Effective_start
   , max(END_DATE) AS Effective_end
   , first(POLICY_NUMBER) AS Policy_number    FROM RPT_CLIENT_PAYER_PLAN P
JOIN RPT_SCHEDULED_ACTIVITIES A ON P.CLIENT_ID = A.CLIENT_ID
WHERE trunc(ACTUAL_BEGIN_DATETIME) >= ${p_begin_time} 
  AND trunc(ACTUAL_END_DATETIME) <= ${p_end_time}
  AND trunc(BEGIN_DATE) <= ${END_DATE}
  AND trunc(END_DATE)> ${BEGIN_DATE} 
   OR ISNULL(trunc(END_DATE), GETDATE())  -- sets end date to today id null
GROUP BY CLIENT_NAME

这应该给你一个Client_names表,Effective_start(最早的开始日期),Effective_end(最旧的END_DATE,注意处理空值的注释,你可能想要一些不同的东西),以及sql遇到的每个client_name的第一个“policy_NUMBER”。

我猜你的真正目标是,但希望这会让你再次前进。


推荐阅读