我有以下主表,称为主表和示例数据
ID---------------Date
1 2014-09-07
2 2014-09-07
3 2014-09-08
以下详细信息表称为“详细信息”
masterId-------------Name
1 John Walsh
1 John Jones
2 John Carney
1 Peter Lewis
3 John Wilson
现在,我想找出主记录(在“日期”列上分组)的计数,这些主记录的对应明细记录的名称为“ John”。
我无法弄清楚如何为该作业编写单个SQL语句。
**请注意,需要加入才能找到要计数的主记录。但是,这样的连接会创建重复的主记录以供计数。在对主表的“日期”列进行分组时,我需要从计数中删除此类重复记录。
正确的结果应该是:
count: grouped on Date column
2 2014-09-07
1 2014-09-08
**
谢谢并恭祝安康!
该答案假定以下条件
SELECT Date, Count(*)
FROM tblmaster
INNER JOIN tbldetails ON tblmaster.ID=tbldetails.masterId
WHERE NAME LIKE 'John%'
GROUP BY Date, tbldetails.masterId
我们在这里所做的是在字符串搜索中使用通配符,说“寻找任何长度后跟的字符的约翰”。
另外,这是一种基于我们正在使用的方法创建表变量的方法
DECLARE @tblmaster as table(
ID int,
[date] datetime
)
DECLARE @tbldetails as table(
masterID int,
name varchar(50)
)
INSERT INTO @tblmaster (ID,[date])
VALUES
(1,'2014-09-07'),(2,'2014-09-07'),(3,'2014-09-08')
INSERT INTO @tbldetails(masterID, name) VALUES
(1,'John Walsh'),
(1,'John Jones'),
(2,'John Carney'),
(1,'Peter Lewis'),
(3,'John Wilson')
根据下面的所有注释,此SQL语句笨拙的应该可以解决问题。
SELECT date,count(t1.ID) FROM @tblmaster mainTable INNER JOIN
(
SELECT ID, COUNT(*) as countOfAll
FROM @tblmaster t1
INNER JOIN @tbldetails t2 ON t1.ID=t2.masterId
WHERE NAME LIKE 'John%'
GROUP BY id)
as t1 on t1.ID = mainTable.id
GROUP BY mainTable.date
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句