基于一个“分组依据”下的两个分离列,仅获取与条件匹配的行的SQL查询
简单的SELECT查询将返回如下数据: 从数据中选择ID、用户、国家/地区、时间记录基于一个“分组依据”下的两个分离列,仅获取与条件匹配的行的SQL查询,sql,sql-server,Sql,Sql Server,简单的SELECT查询将返回如下数据: 从数据中选择ID、用户、国家/地区、时间记录 ID User Country TimeLogged 1 Samantha SCO 10 1 John UK 5 1 Andrew NZL 15 2 John UK 20 3 Mark UK 10 3 Mark UK
ID User Country TimeLogged
1 Samantha SCO 10
1 John UK 5
1 Andrew NZL 15
2 John UK 20
3 Mark UK 10
3 Mark UK 20
3 Steven UK 10
3 Andrew NZL 15
3 Sharon IRL 5
4 Andrew NZL 25
4 Michael AUS 5
5 Jessica USA 30
我想返回按ID分组的每个用户记录的时间总和
但仅适用于同时包含Country=UK和User=Andrew这两个值的ID号
因此,上述示例中的输出为
ID User Country TimeLogged
1 John UK 5
1 Andrew NZL 15
3 Mark UK 30
3 Steven UK 10
3 Andrew NZL 15
所以,你已经描述了你需要写的东西,几乎完美但不完全。您的结果表表明您希望Country=UK或User=Andrew,而不是AND 您需要选择并分组,然后包括一个,其中:-
Select ID, User, Country, SUM(Timelogged) as Timelogged from mytable
WHERE Country='UK' OR User='Andrew'
Group by ID, user, country
首先,您需要确定要返回的ID
SELECT ID FROM MyTable WHERE Country='UK'
INTERSECT
SELECT ID FROM MyTable WHERE [User]='Andrew';
在此基础上,您可以过滤以聚合预期的行
SELECT ID,
[User],
Country,
SUM(Timelogged) as Timelogged
FROM mytable
WHERE (Country='UK' OR [User]='Andrew')
AND ID IN( SELECT ID FROM MyTable WHERE Country='UK'
INTERSECT
SELECT ID FROM MyTable WHERE [User]='Andrew')
GROUP BY ID, [User], country;
从添加WHERE子句开始,仅包括国家为英国或用户为安德鲁的行。如果您只需要这些字段对中的ID号(国家=英国和用户=安德鲁),那么在预期结果中,国家为英国和用户安德鲁的行是如何出现的?Isaac-OP错误地描述了他的逻辑。我认为他的意思是或不是AND@iainc,重新阅读OP的要求。仅返回包含Country='UK'和User='Andrew'的ID。不在同一行,但按ID分组。我读取OP的要求。OP的结果表与OP的逻辑相矛盾。如果Andrew和UK,则ID 3 Andrew NZL将不在。重新阅读OP的要求。此查询将返回ID=4 Andrew,这不是OP想要的,因为ID=4不包含Country=UK,ID=3也不包含Country UK,但它在OP的结果表中。但是ID=3包含Andrew。这让人困惑,但这是一个隐含的和按ID分组的方法。太好了!工作起来很有魅力。从未使用过INTERSECT,所以我学到了一些新东西。