我是 SQL 新手,使用时间有限,所以请善待。我以前在 NPR 中编程并编写过代码,但我对 SQL 有基本的了解,而且 SQL 可能是另一种野兽。我喜欢边做边学,并且已经为此绊倒了几天,现在是我大手笔的时候了!我已经阅读了 StackOverflow 中的许多帖子,并且非常喜欢您的社区如何共同努力,为那些不能(或不愿)向所有响应和帮助他人的人致敬,干得好。无论如何,我只是无法考虑获得所需数据的要求。我浏览了许多帖子并阅读了一堆,其中一些处理子查询,其他 DISTINCT 和其他人加入,但我还没有看到一个可以解决我遇到的问题。除以下情况外,一切正常:
- 我无法打印子查询上的愚蠢列标题。
- 我无法弄清楚仅显示 1 个帐户及其响应和日期的规则。
- 数 #2 的分子 大的是 #2
规则: 1. 日期范围内无论有多少出现,我只能拥有一个帐户。2. 我必须记录访问的响应,如果有 1 个响应,请将其添加到分子并取那个特定日期。响应为“1”的不同日期无关紧要,只需捕获其中一个即可。因此,例如,如果有 5 个帐户具有相同的 UnitNumber,并且 3 的响应为“1”,而 2 的响应为“0”,则仅抓取其中一个“1”及其日期并增加分子;否则,如果它们都是 0,则仅显示其中一个帐户,但不增加分子。3. 我必须记录回复的日期。
例如:M000003206 下面的账户应该只显示一次,响应值应该是 1,日期是 01/03/13,分母应该是 13。
*M000003206 1 1/03/2011 应出现在数据中,并填充分子 *M000003206 0 1/04/2011 不应出现在数据中,并且不在分母或分子中。
注意: - “响应”是跟踪一堆查询 6000 左右的字段。C.AD.DOCS 部分可以有 5 个我不关心的答案,我只想看看他们是否对其中任何一个做出了回应,如果有,请输入 1;如果没有答案响应为 0。 - 我没有写分子部分,因为我不知道如何制定规则来限制帐户只显示 1 次访问 - 另外我得到一个没有列出的列名,我已经看过但是我似乎无法在子查询中找到如何更正此问题
对于所有为 1 的响应,分子(一旦写入)应为 7。
顺便说一句:我更改了单元号并承认日期以保护机密数据。
感谢您的任何回复!
输出 - - - - - - - - - - - - - - - - - - - - - - - - - ------------
分母 14
UnitNumber 无列名 无列名
M000001058 1 1/04/2011
M000004955 0 1/03/2011
M000006362 1 1/03/2011
M000006211 1 1/03/2011
M000004212 0 1/03/2011
M000009850 1 1/03/2011
M000003047 0 1/04/2011
* M000003206 1 1/03/2011*
* M000003206 0 1/04/2011*
M000002526 0 1/04/2011
M000000538 1 1/04/2011
M000003813 0 1/03/2011
M000004473 1 1/04/2011
M000004794 1 1/03/2011
Should be Should be
Response AdmitDate
代码 - - - - - - - - - - - - - - - - - - - - - - - - - ------------------
use livedb
DECLARE @StartDate DateTime,
@EndDate DateTime
SET @StartDate = '1/03/2011 00:00:00.000'
SET @EndDate = '1/05/2011 00:00:00.000'
SELECT DISTINCT COUNT(UnitNumber) AS Denominator
FROM AbstractData
WHERE (AbstractData.AdmitDateTime BETWEEN @StartDate and @EndDate)
and (AbstractData.BirthDateTime < '1946-09-29 00:00:00.000')
and (AbstractData.PtStatus IN ('IN','INO'))
SELECT DISTINCT AbstractData.UnitNumber AS UnitNumber,
(SELECT MAX(CASE WHEN AbsQueriesMult.GroupResponse = 'C.AD.DOCS' THEN 1 ELSE 0 END) AS Response
FROM AbsQueriesMult WHERE AbstractData.AbstractID = AbsQueriesMult.AbstractID),
(SELECT CONVERT(VARCHAR(12),AbstractData.AdmitDateTime,101) AS AdmitDate)
FROM AbstractData
WHERE (AbstractData.AdmitDateTime BETWEEN @StartDate and @EndDate)
and (AbstractData.BirthDateTime < '1946-09-29 00:00:00.000')
and (AbstractData.PtStatus IN ('IN','INO'))
ORDER BY UnitNumber