我们有一张表有点像这样:
Year Episode Code
2000 1 A001
2000 1 A001
2000 1 C007
2000 2 A001
2000 2 B001
它引用了另一个表格,其中Year
和Episode
的组合是唯一的,但我正在使用的这个表格列出了应用于每集的代码选择。
我要做的是创建一个表格,该表格返回每年的总集数和具有特定代码的剧集。我不能只做一个简单的“COUNT(*)”代码,因为一集可能会多次使用相同的代码。
任何人都可以看到一种可行的方式来做我正在尝试的事情吗?
答案 0 :(得分:1)
这可能就是你所追求的。您至少需要SQL Server 2005才能使用数据透视功能。
create table MyTable (
[Year] datetime,
Episode int,
Code nvarchar(20)
)
insert into MyTable values ('01-01-2000', 1, 'A001')
insert into MyTable values ('01-01-2000', 1, 'A001')
insert into MyTable values ('01-01-2000', 1, 'C007')
insert into MyTable values ('01-01-2000', 2, 'A001')
insert into MyTable values ('01-01-2000', 2, 'B001')
insert into MyTable values ('01-01-2000', 2, 'B001')
insert into MyTable values ('01-01-2001', 1, 'A001')
insert into MyTable values ('01-01-2002', 1, 'A001')
insert into MyTable values ('01-01-2003', 1, 'C007')
select [Code], [2000], [2001], [2002]
from (
select Code,
DATEPART(year, [Year]) as date,
count(Episode) as instances
from MyTable
group by DATEPART(year, [year]), code) as o
pivot
(
sum(instances) for date in ([2000], [2001], [2002])
) as p
答案 1 :(得分:0)
通过“创建表”,我将假设您知道如何从结果集创建表。因此,这会减少为:什么查询将返回每年剧集数的结果集。
您引用重复的元组是一个问题。你是对的,他们是个问题;他们为什么在那里? (2000, 1, 'A001')
的一个元组与三个相同的元组之间的语义差异是什么?
DISTINCT
子句旨在剥离那些;我建议您在不知道明确的理由在结果集中保留重复时使用它。
因此,如果重复项没有意义,并且结果集足以让您前进,那么:
SELECT DISTINCT
year,
COUNT(episode) AS episode_count
FROM (
SELECT DISTINCT
year,
episode
FROM episode_code
WHERE
code = 'A001'
) AS episode_for_code
GROUP BY year
对于具有指定代码的episode_code
元组,将按年份计算剧集数。
一旦你有了这个,我会调查你在episode_code
中有重复的原因,并删除它们,除非你得到一个好的答案。